接下来没有定义,但我不明白如何在我的函数中定义它

当我尝试访问/当然/新我得到一个错误[ReferenceError: next is not defined]

我如何以及在哪里为我的错误function定义下一个? 如果我只是添加一个参数,就像我在早期的模型中所做的那样,我只是得到更多的错误。

courseController:

 module.exports = { 'new':function(req, res, err){ Student.findOne(req.param('takes'), function foundStudent (err, student){ if (err) return next(err); if (!student) return next(); res.view({ student: student }); }); }, create: function(req,res,next){ Course.create(req.params.all(), function courseCreated (err, course){ if(err) next(err); res.json(course) }); } }; 

课程模式:

 module.exports = { attributes: { code:{ type: "string" }, name:{ type:"string" }, takes:{ model: 'student', required: true } } }; 

/course/new.ejs:

 <form action="/course/create" method="post"> <h2>Create a new course for <%= student.name %></h2> <input type="hidden" name="takes" value="<%= student.id%>"/> <input type="text" placeholder="Course Code" name="code"><br/> <input type="text" placeholder="Name" name="student"><br/> <input type="submit" value="Add course"/> </form> 

学生模式:

 //A student can have take many courses module.exports = { attributes: { name:{ type: "string", required: true }, username:{ type:"string" }, courses: { collection: 'course', via: 'takes' } } }; 

问题在这里:

  module.exports = { // you had err here instead of next as last argument 'new':function(req, res, next){ Student.findOne({_id:req.param('takes')}, function foundStudent (err, student){ if (err) return next(err); if (!student) return next(); res.view({ student: student }); }); }, create: function(req,res,next){ Course.create(req.params.all(), function courseCreated (err, course){ if(err) next(err); res.json(course) }); } }; 

我解决了它。

 'new':function(req, res, next){ Student.findOne({id:req.param('student')}, function foundStudent (err, student){ if (err) return next(err); if (!student) return next(); res.view({ student: student }); }); }, 

问题在于paramtypes。 通过将其更改为实际上想要访问的student模型,而不是集合使用它。

特别感谢@AJS的帮助。

我认为你需要将newfunction的定义更改为:

  'new':function(req, res, next){ 

根据Sails文档,next()函数用于将中间件链接在一起。 因此,在到达控制器之前,您的传入请求可以被中间件操纵。

我相信实现你的控制器方法的正确方法是:

 'new':function(req, res, err){ Student.findOne(req.param('takes'), function foundStudent (err, student){ if (err) { res.status(400); res.view('400', {"message":"Sorry, there was a problem with your request"}); if (!student){ ; res.status(404); res.view('404', {"message":"Sorry, there was no student found by that name or id"}); } res.view({ student: student }); }); }, 

这使您可以在您的API中使用正确的HTTP代码。