我正在努力熟悉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>
以下是如何在routes.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
});}
};
当我点击表单的提交按钮时,控制器似乎从未被调用,我被重定向到一个简单的"禁止"。发生了什么事?谢谢你的帮助。
考虑到您使用的是应该具有的action2格式:
操作Add-in-api/controllers/calible/Add-
路由:
'POST /api/v1/caliber/add': { action: 'caliber/add' }'
在视图文件中:
<form method="post" action="add" enctype="multipart/form-data">
尽管我建议您使用较长的操作名称,因为您可能添加了几个控制器,这可能会导致问题。
都在文件里了,请仔细阅读。