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

Gur*_*101 8 node.js sails.js

当我尝试访问/ course/new时出现错误[ReferenceError: next is not defined].

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

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)
    });
  }

};
Run Code Online (Sandbox Code Playgroud)

课程模式:

module.exports = {

  attributes: {
    code:{
      type: "string"
    },

    name:{
      type:"string"
    },

    takes:{
      model: 'student',
      required: true
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

/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>
Run Code Online (Sandbox Code Playgroud)

学生架构:

//A student can have take many courses
module.exports = {

  attributes: {
    name:{
      type: "string",
      required: true
    },
    username:{
      type:"string"
    },

    courses: {
      collection: 'course',
      via: 'takes'
    }
  }

};
Run Code Online (Sandbox Code Playgroud)

AJS*_*AJS 9

问题出在这里:

 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)
 });
}

};
Run Code Online (Sandbox Code Playgroud)


Mo *_*sis 7

对于和我犯同样错误的人来说

我做到了

.get((req, res) => {
Run Code Online (Sandbox Code Playgroud)

代替

.get((req, res, next) => {
Run Code Online (Sandbox Code Playgroud)

我忘记了下一个参数


Tud*_*tin 6

我认为您需要将该函数的定义更改new为:

 'new':function(req, res, next){
Run Code Online (Sandbox Code Playgroud)


Gur*_*101 2

我解决了。

'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
      });
    });
  },
Run Code Online (Sandbox Code Playgroud)

问题也出在参数类型上。通过将其更改为student实际想要访问的模型而不是takes它所工作的集合。

特别感谢@AJS 的帮助。