使用“ POST”方法的Node.js Sails html数据无法传递给控制器

时间:2018-08-02 09:02:14

标签: javascript html node.js sails.js

我是MVC的新手。

当我要将表单数据从ejs文件传递到控制器时,它不起作用。

Create.ejs文件

<!--create.ejs-->
<h2 class="col-sm-offset-1">Person Create form</h2>

<form action="/person/create" method="POST" class="form-horizontal">
<div class="form-group">
    <label class="control-label col-sm-2">Name: </label>
    <div class="col-sm-8">
        <input class="form-control" name="Person[name]" type="text">
    </div>
</div>

<div class="form-group">
    <label class="control-label col-sm-2">Age: </label>
    <div class="col-sm-8">
        <input class="form-control" name="Person[age]" type="number"
        min="0" max="120">
    </div>
</div>

<button class="btn btn-default col-sm-offset-2" type="submit" value="ADD">Submit</button>

PersonController.js

module.exports = {
create: function(req, res) {
if (req.method == "POST") {
    Person.create(req.body.Person).exec( function(err, model) {
        return res.send("Successfully Created!");
    });
} else {
    return res.view('person/create');
}
},

结果是它无法进入(req.method ==“ POST”)条件。 给我404错误。

2 个答案:

答案 0 :(得分:1)

就像@Tejashwi一样,您建议您将路线更改为POST。

    'POST  /api/v1/create':   { action: 'create/person-create-form' },

答案 1 :(得分:1)

404是not found的结果。

在发布信息时,请确保您以Controller功能为目标,请尝试:

'POST /person/create': 'person/PersonController.create',

尽管在使用控制器时为什么会有一个名为 person 的子文件夹?

使用操作

在Sails v1.0中,您可以将控制器功能分成更易于管理的动作。子文件夹 api / controllers / person 现在变得更有意义了。

您的route.js文件将显示为'POST /person/create': {action: 'person/create'},

为简单起见,我将req.body.Person作为数组删除了...

<form action="/person/create" method="POST" class="form-horizontal">

  <input type="hidden" name="_csrf" value="<%= _csrf %>" />

  <div class="form-group">
    <label class="control-label col-sm-2">Full Name: </label>
    <div class="col-sm-8">
      <input class="form-control" name="fullName" placeholder="John Johnson" type="text">
    </div>
  </div>

  <div class="form-group">
    <label class="control-label col-sm-2">Age: </label>
    <div class="col-sm-8">
      <input class="form-control" name="age" type="number" min="0" max="120">
    </div>
  </div>

  <button class="btn btn-default col-sm-offset-2" type="submit" value="ADD">Submit</button>

</form>

然后您的异步功能将类似于...

module.exports = {


      friendlyName: 'Create Person.',
      description: 'Creating a new person.',


      exits: {

        success: {
          description: 'Person Created successfully.',
          viewTemplatePath: 'person/review',
        }

      },

      fn: async function (inputs, exits) {
        
        if (!this.req.me) throw {redirect: '/'};   

        let params = this.req.allParams();

        let person = await Person.create(params).fetch();
        
        return exits.success({person:person});

      }
}