SailsCasts用户模型validation

我正在通过Ponzi Coder的SailsCasts Youtube视图创buildregistry单,但是我遇到了用户模型validation方面的问题。 如果我拿出validation规则,我可以提交表单,但是当我重新插入规则时,我得到了下面的警告。另外,当我能够提交时,只返回ID和CreatedAt,没有别的:

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

以下是我的用户模型:

 module.exports = { schema: true, attributes: { name: { type: 'string', required: true }, email: { type: 'string', email: true, unique: true, required: true }, password: { type: 'string', required: true }, encryptedPassword:{ type: 'string' }, } }; 

下面是我的UserController:

 module.exports = { // Gets the view: signup.ejs 'signup': function(req, res){ res.view(); }, //Creates a user with the info sent from the //signup form in signup.ejs create: function(req, res, next){ User.create (req.params.all(), function userCreated(err, user){ //If there is an error if(err) return next(err); //After the user is successfully created //redirect user to the show action res.json(user); }); } }; 

以下是我的registry单:

 <form action="/user/create" method="POST" class="form-horizontal"> <div class="control-group"> <label class="control-label" for="inputname">Name</label> <div class="controls"> <input type="text" id="Name" placeholder="Name"> </div> </div> <div class="control-group"> <label class="control-label" for="inputEmail">Email</label> <div class="controls"> <input type="text" id="Email" placeholder="Email"> </div> </div> <div class="control-group"> <label class="control-label" for="inputPassword">Password</label> <div class="controls"> <input type="password" id="Password" placeholder="Password"> </div> </div> <div class="control-group"> <label class="control-label" for="inputRetypePassword">Retype Password</label> <div class="controls"> <input type="password" id="RetypePassword" placeholder="Retype Password"> </div> </div> <div class="control-group"> <button type="submit" class="btn">Sign up</button> </div> <input type="hidden" name="_csrf" value="<%= _csrf %>"/> </form> 

你需要在你的input上加上“name”属性:

 <input type="text" id="Name" placeholder="Name"> 

成为

 <input type="text" id="Name" name="name" placeholder="Name"> 

所有的input相同。 不要忘记像你的模型一样用小写字母来表示“名字”。

我能解决我的问题。 我修改了我的http.js中的中间件。 在我的情况下bodyParser中间件失踪的顺序。 当我把护照和sailsjs结合起来的时候,我可能会这样做的。 一旦我添加“bodyParser”,我的post请求开始得到预期的参数。

希望这有助于某人。

 in config/http.js order: [ 'startRequestTimer', 'cookieParser', 'session', 'bodyParser', 'passportInit', 'passportSession', '$custom', 'router', 'www', 'favicon', '404', '500' ]