Sails.js Waterlock – 唯一的用户名

我正在使用sail.js来pipe理我的用户。 我希望他们有一个唯一的用户名,所以我在我的User.js中有这个:

module.exports = { autoPk : false, attributes: require('waterlock').models.user.attributes({ id : { type : "string", primaryKey : true, unique : true } }), beforeCreate: require('waterlock').models.user.beforeCreate, beforeUpdate: require('waterlock').models.user.beforeUpdate }; 

我的Auth.js看起来像这样:

 module.exports = { attributes: require('waterlock').models.auth.attributes({ username : { type : "string", unique : true } }), beforeCreate: require('waterlock').models.auth.beforeCreate, beforeUpdate: require('waterlock').models.auth.beforeUpdate }; 

我正在创build这样的用户:

 auth = { username: params.username, password: params.password }; userObj = { id: params.username }; User.create(userObj) .exec(function (err, user) { if (err) { sails.log.error("USER: " + err); req.session.flash = { err: err }; return res.json(err);//res.redirect('/user/create'); } else { req.session.user = user; waterlock.engine.attachAuthToUser(auth, user, function (err) { if (err) { sails.log.error("AUTH: " + err); return res.json(err); } else { req.session.authenticated = true; return res.json({ok: true}); } }); } }); 

很明显,我想创build一个用户失败,当一个具有相同的ID已经存在。 但是,由于对用户名的唯一限制,用户的创build以及创buildauth失败。 但是,一旦失败,我已经有两个用户在我的数据库中具有相同的ID,没有auth附加。 为什么发生这种情况? 我正在使用节点v0.12.1,风帆0.11和0.14水锁。 我使用的适配器是内置的{migrate:“alter”}的sails-disk。 另一个奇怪的是:当我重新启动帆,它问我是否应该删除用户表中的重复。 为什么它会识别它们,但不是当我创build用户时? 谢谢你的帮助,亚历山大

也许你必须将属性migrate:'drop'添加到每个模型,重新加载这两个模型。 testing一次,然后删除该属性。

那么你需要指定它:

 module.exports = { attributes: { username: { type: 'string', unique: true, required: true } } }; 

你也可以使用自定义types:

 module.exports = { types: { size: function() { true } }, attributes: { username: { type: 'string', unique: true, minLength: 4, macLength: 10, size: 10, required: true } } }; 

而且,如果错误:

 { "error": "E_VALIDATION", "status": 400, "summary": "2 attributes are invalid", "model": "User", "invalidAttributes": { "username": [ { "rule": "string", "message": "`undefined` should be a string (instead of \"null\", which is a object)" }, { "rule": "minLength", "message": "\"minLength\" validation rule failed for input: null" }, { "rule": "required", "message": "\"required\" validation rule failed for input: null" } ], "password": [ { "rule": "minLength", "message": "\"minLength\" validation rule failed for input: '123'" } ] } }