UUID作为sailsjs域中的主键

时间:2018-05-09 09:43:28

标签: sails.js

我正在使用Sails.js版本1.0.2。我试图在整个应用程序中将uuid指定为主键。我试过把 在model.js中id: { type: 'string', defaultsTo:uuid.v4() },但它说主键必须是唯一的,因此不能包含默认值。

_________________ EDIT _______________

我在我的域中尝试了此代码

beforeCreate: function (modelObj, next) {
modelObj.id = uuidv4.v4();
next();
}

编辑我的Model.js配置就像:

attributes: {
createdAt: { type: 'number', autoCreatedAt: true, },
updatedAt: { type: 'number', autoUpdatedAt: true, },
id: { type: 'string',required:true},
}

beforeCreate方法永远不会执行,并在创建记录时抛出错误,如:

error: Sending 500 ("Server Error") response: 
{ UsageError: Invalid new record.
Details:
Missing value for required attribute `id`.  Expected a string, but 
instead, got: undefined

如果我做错了,请告诉我。

由于

1 个答案:

答案 0 :(得分:1)

您可以执行此类操作,而不是提供默认值

beforeCreate: function (modelObj, next) {
    modelObj.id = uuid.v4();
    next();
  }

您可以在模型中添加此功能。只要模型上有创建操作,就会调用它。

您的 Model.js 看起来应该是这样的

attributes: {
    createdAt: { type: 'number', autoCreatedAt: true, },
    updatedAt: { type: 'number', autoUpdatedAt: true, },
    id: { type: 'string',required:true},
},
beforeCreate: function (modelObj, next) {
    modelObj.id = uuid.v4();
    next();
}

我的控制器和模型的示例代码,

<强> TestController.js

module.exports = {
    create: function(req, res) {
        Test.create({"name": "arshad"})
            .then(function(result){
                res.send("done");
            })
    }
};

Test.js 型号

module.exports = {

  attributes: {
     id: { type: 'string', required: true },
     name: { type: 'string' }
  },
  beforeCreate: function(obj, next) {
     obj.id = 'someId';
     next();
  }
};

这就是你的模型和控制器的样子。这会将beforeCreate函数中定义的 someId 添加到对象

在您的情况下,您使用的是uuid包。检查调试模式是否在beforeCreate中可用的uuid引用