Sails.js:提交表单时从未调用过控制器

时间:2020-03-09 16:04:45

标签: javascript node.js sails.js ejs

我正在尝试使自己熟悉Sails.js。我遇到了一个问题:提交表单时,我无法设法调用控制器。

这是我的ejs文件中的表单:

  <form method="post" action="/calibers/add" enctype="multipart/form-data">
    <label for="fname">Name of the new caliber:</label><br>
    <input type="text" id="name" name="name" value="" placeholder="7,62x54 R">
    <input type="submit" value="submit" class="btn">
  </form>

这是在route.js中完成映射的方式:

  'GET /calibers/view':      { action: 'calibers/view'},
  'POST /calibers/add':      { action: 'calibers/add'},

这是所谓的控制器:add.js:

module.exports = {

  friendlyName: 'Add calibers',

  description: 'Adding new caliber to calibers list',

  inputs: {
          name: {
            type: 'string',
            required: true
          },
  },

  exits: {
    success: {
        responseType: 'view',
        viewTemplatePath: 'pages/welcome'
      },
  },

  fn: async function (inputs, exits) {
    console.log("Called function");

    let newCal = await Caliber.create({name: inputs.name});

    // All done.
    if (!newCal) {
       return exits.invalid({
         message: 'New caliber could\'t be added'
       });
     }

     return exits.success({
       message: 'New caliber successfully added',
       data: userRecord
     });}

};

当我单击表单的提交按钮时,似乎从未调用过该控制器,并且将我重定向到一个简单的“禁止”。到底是怎么回事 ?谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

考虑到您使用的是action2格式,

添加到api / controllers / calibre / add中的操作

路由:

'POST /api/v1/caliber/add': { action: 'caliber/add' }'

在视图文件中:

<form method="post" action="add" enctype="multipart/form-data">

尽管我建议您使用更长的动作名称,因为您可能在多个控制器中添加了动作名称,这可能会导致问题。

所有内容都在文档中,请仔细阅读。