Mongoose: пользовательский тип схемы - PullRequest
0 голосов
/ 02 июля 2018

Я следовал этой документации mongoose для пользовательского типа схемы, чтобы создать "большую строку":

"use strict";

const mongoose = require('mongoose')

let STRING_LARGE = (key, options) => {   
  mongoose.SchemaType.call(this, key, options, 'STRING_LARGE'); 
}; 
STRING_LARGE.prototype = Object.create(mongoose.SchemaType.prototype);

STRING_LARGE.prototype.cast = function(val) {   
  let _val = String(val);   
  if(!/^[a-zA-Z0-9]{0,400}$/.test(_val)){
    throw new Error('STRING_LARGE: ' + val + ' is not a valid STRING_LARGE');   
  }

  return _val; };

module.exports = STRING_LARGE;

И я использую это в схеме:

"use strict";

const mongoose = require('mongoose');

mongoose.Schema.Types.STRING_LARGE = require('./types/string_large')

const schema = new mongoose.Schema({
  details:     { type: STRING_LARGE, required: true },
  link:        { type: STRING_LARGE, required: true }
});

module.exports = schema;

Но я получаю ошибку:

[путь] \ Схемы [shema.js]: 8
подробности: {тип: STRING_LARGE, обязательно: true},

ReferenceError: STRING_LARGE не определено на объекте. ([Путь] \ Схемы [shema.js]: 8: 24) ...

-------------------------- ОБНОВЛЕНИЕ: РАБОЧИЙ КОД -------------- ------------

используйте "function ()" вместо "() =>"

"use strict";

const mongoose = require('mongoose')

function STRING_LARGE (key, options) {   
  mongoose.SchemaType.call(this, key, options, 'STRING_LARGE'); 
}; 
STRING_LARGE.prototype = Object.create(mongoose.SchemaType.prototype);

STRING_LARGE.prototype.cast = function(val) {   
  let _val = String(val);   
  if(!/^[a-zA-Z0-9]{0,400}$/.test(_val)){
    throw new Error('STRING_LARGE: ' + val + ' is not a valid STRING_LARGE');   
  }

  return _val; };

использовать "mongoose.Schema.Types.LARGE_STRING" вместо "LARGE_STRING"

module.exports = STRING_LARGE;

"use strict";

const mongoose = require('mongoose');

mongoose.Schema.Types.STRING_LARGE = require('./types/string_large')

const schema = new mongoose.Schema({
  details:     { type: mongoose.Schema.Types.STRING_LARGE, required: true },
  link:        { type: mongoose.Schema.Types.STRING_LARGE, required: true }
});

module.exports = schema;

1 Ответ

0 голосов
/ 02 июля 2018

Вы присваиваете свой тип mongoose.Schema.Types.STRING_LARGE, а затем используете STRING_LARGE - вот куда выдается ваш ReferenceError. Вы должны использовать свой тип напрямую:

const schema = new mongoose.Schema({
  details:     { type: mongoose.Schema.Types.STRING_LARGE, required: true },
  link:        { type: mongoose.Schema.Types.STRING_LARGE, required: true }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...