Javascript 如何使用express.js、mongoose和jade创建POST请求

Javascript 如何使用express.js、mongoose和jade创建POST请求,javascript,node.js,mongoose,pug,Javascript,Node.js,Mongoose,Pug,下面的代码来自我正在做的一个教程。我想知道如何捕获和响应post请求。我认为这很容易理解,但问题如下 首先是代码: 节点 app.post('/tasks', function(req, res){ var task = new Task(req.body.task); // This line task.save(function (err) { if (!err) { res.redirect('/tasks/new'); } else {

下面的代码来自我正在做的一个教程。我想知道如何捕获和响应post请求。我认为这很容易理解,但问题如下

首先是代码:

节点

app.post('/tasks', function(req, res){
  var task = new Task(req.body.task);   // This line 
  task.save(function (err) {
    if (!err) {
      res.redirect('/tasks/new');
    }
    else {
      throw err;
    }
  });
});
extends ../layout

block content
  h1 New task view

  form(role='form', method='post', action='/tasks')
    fieldset
      legend Add a task
      div.form-group
        label Task
        input(name='task[task]', class='form-control')  // This line
      button.btn.btn-primary(type='submit') Submit
      button.btn.btn-default(type='reset') Clear
mongoose.connect('mongodb://localhost/todo_development');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var Task = new Schema({
  task: { type: String, required: true }
});

var Task = mongoose.model('Task', Task);
  var task = new Task(req.body.oink);   // This line 
input(name='oink[oink]', class='form-control')  // This line
翡翠

app.post('/tasks', function(req, res){
  var task = new Task(req.body.task);   // This line 
  task.save(function (err) {
    if (!err) {
      res.redirect('/tasks/new');
    }
    else {
      throw err;
    }
  });
});
extends ../layout

block content
  h1 New task view

  form(role='form', method='post', action='/tasks')
    fieldset
      legend Add a task
      div.form-group
        label Task
        input(name='task[task]', class='form-control')  // This line
      button.btn.btn-primary(type='submit') Submit
      button.btn.btn-default(type='reset') Clear
mongoose.connect('mongodb://localhost/todo_development');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var Task = new Schema({
  task: { type: String, required: true }
});

var Task = mongoose.model('Task', Task);
  var task = new Task(req.body.oink);   // This line 
input(name='oink[oink]', class='form-control')  // This line
猫鼬

app.post('/tasks', function(req, res){
  var task = new Task(req.body.task);   // This line 
  task.save(function (err) {
    if (!err) {
      res.redirect('/tasks/new');
    }
    else {
      throw err;
    }
  });
});
extends ../layout

block content
  h1 New task view

  form(role='form', method='post', action='/tasks')
    fieldset
      legend Add a task
      div.form-group
        label Task
        input(name='task[task]', class='form-control')  // This line
      button.btn.btn-primary(type='submit') Submit
      button.btn.btn-default(type='reset') Clear
mongoose.connect('mongodb://localhost/todo_development');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var Task = new Schema({
  task: { type: String, required: true }
});

var Task = mongoose.model('Task', Task);
  var task = new Task(req.body.oink);   // This line 
input(name='oink[oink]', class='form-control')  // This line
在上面的前两个代码块中,每个代码块都有一个名为“thisline”的注释。在这些行中,单词task作为属性/属性。当我将这些更改为其他类似“oink”的内容时,它会破坏代码

例如,如果我这样做:

节点

app.post('/tasks', function(req, res){
  var task = new Task(req.body.task);   // This line 
  task.save(function (err) {
    if (!err) {
      res.redirect('/tasks/new');
    }
    else {
      throw err;
    }
  });
});
extends ../layout

block content
  h1 New task view

  form(role='form', method='post', action='/tasks')
    fieldset
      legend Add a task
      div.form-group
        label Task
        input(name='task[task]', class='form-control')  // This line
      button.btn.btn-primary(type='submit') Submit
      button.btn.btn-default(type='reset') Clear
mongoose.connect('mongodb://localhost/todo_development');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var Task = new Schema({
  task: { type: String, required: true }
});

var Task = mongoose.model('Task', Task);
  var task = new Task(req.body.oink);   // This line 
input(name='oink[oink]', class='form-control')  // This line
翡翠

app.post('/tasks', function(req, res){
  var task = new Task(req.body.task);   // This line 
  task.save(function (err) {
    if (!err) {
      res.redirect('/tasks/new');
    }
    else {
      throw err;
    }
  });
});
extends ../layout

block content
  h1 New task view

  form(role='form', method='post', action='/tasks')
    fieldset
      legend Add a task
      div.form-group
        label Task
        input(name='task[task]', class='form-control')  // This line
      button.btn.btn-primary(type='submit') Submit
      button.btn.btn-default(type='reset') Clear
mongoose.connect('mongodb://localhost/todo_development');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var Task = new Schema({
  task: { type: String, required: true }
});

var Task = mongoose.model('Task', Task);
  var task = new Task(req.body.oink);   // This line 
input(name='oink[oink]', class='form-control')  // This line
这并不难。 我不知道为什么也不知道如何正确处理POST请求(

尝试更改此行

var task = new Task(req.body.task);
为此:

var task = new Task(req.body);
我对玉不是很熟悉,但据我所知,你应该把你的输入命名为

input(id='password',type='password',value='',placeholder='',name='password')
另外,您的猫鼬模式是什么样子的?这可能会有所帮助

您已定义变量“Task”两次。请尝试此

var taskSchema = new Schema({
  task: { type: String, required: true }
});

var Task = mongoose.model('Task', taskSchema);
付诸表决: 输入(name='task[],class='form-control')//此行

然后说: var task=新任务({'task':req.body.task});//此行


运气

可能使用
输入(name='oink')
?我不明白你为什么要用方括号重复它。教程是这样写的。这本书就是这样写的。我想这可能是一个jade约定或什么的。你的想法不起作用。我得到一个错误。500 TypeError:无法使用“in”操作符在adfI中搜索“\u id”。我发现括号引用了任务对象In模式问题的根源是输入的命名。请参见编辑。我添加了mongoose模式。我发现[task]引用了内部模式。您可以扩展上面的操作来解释这些更改吗?在jade文件中,名称“task”被调用为节点文件,但名称为[]就像节点文件中的一个变量,我不知道为什么不使用您的代码,但另一种方式是我如何使用它。不发送变量int[]的名称,创建变量i节点文件:{'task':req.body.task}.pdt:我想问题在于构造函数“proto”。对不起,英文版。