Node.js не может установить UUID по умолчанию с помощью mongoose - PullRequest
0 голосов
/ 25 июня 2018

Я пытался определить UUID по умолчанию в mongoose / Node.js / Express для моего поле _id в моей модели схемы ...

/**Demonstrator
 * 
 */
var mongoose = require('mongoose')
var uuid = require('node-uuid')
require('mongoose-uuid2')(mongoose);
var Schema = mongoose.Schema;
require('mongoose-long')(mongoose);
var Status = require('./Status');
var StatusSchema = Status.Schema; 
var SchemaTypes = mongoose.Schema.Types;
const uuidv4 = require('uuid/v4');
var UUID = mongoose.Types.UUID;

var DemonstratorSchema = new Schema({
    //_id: SchemaTypes.Long;
    _id: { type: String, default: uuidv4()},
    id2: SchemaTypes.Long,
    Test: String,    
})

module.exports = mongoose.model("Demonstrator", DemonstratorSchema);
console.log("DemonstratorSchema created!");

Я также пытался написать собственную функцию, как в этом посте: Использование UUID в mongoose для ссылок на ObjectID , но это тоже не сработало ... просто не будет создавать сгенерированный по умолчанию UUID с mongoose в моей базе данных, почему?

РЕДАКТИРОВАТЬ: Я только что узнал, что он создает поле UUID или String с 32-байтовым значением UUID, я просто не смог сделать это непосредственно в оболочке Монго, хотя я думал, что моя схема вроде это принудительно, но это логично, что это бессмыслица, потому что оболочка mongo ничего не знает о моих бэкэнд-ограничениях;) извините за это .... но также можно с уверенностью предположить, что все, что генерируется из конечной точки REST API (POST), генерируется и сохраненный в моем бэкэнде, автоматически создаст UUID?

А что рекомендуется использовать в качестве версии UUID? v1? точнее v4 или даже v5?

1 Ответ

0 голосов
/ 25 июня 2018

Свойство default должно быть функцией, которая возвращает строку (в вашем случае это значение UUIDv4).

Однако это не то, что предоставляет ваша схема:

_id: { type: String, default: uuidv4()}

Это объявление будет запускать функцию uuidv4, которая возвращает строку и будет использовать эту строку в качестве значения по умолчанию .Это похоже на это:

_id: { type: String, default: 'FA6281FF-5961-4F2F-8270-D6AB9954410D'}

Вместо этого передайте ему ссылку на функцию uuidv4:

_id: { type: String, default: uuidv4 }

Таким образом, каждый раз, когда требуется значение по умолчанию, Mongoose будет вызыватьта функция, которая будет каждый раз возвращать новый UUID.

...