我正在尝试使自己熟悉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
});}
};
当我单击表单的提交按钮时,似乎从未调用过该控制器,并且将我重定向到一个简单的“禁止”。到底是怎么回事 ?谢谢您的帮助。
答案 0 :(得分:1)
考虑到您使用的是action2格式,
添加到api / controllers / calibre / add中的操作
路由:
'POST /api/v1/caliber/add': { action: 'caliber/add' }'
在视图文件中:
<form method="post" action="add" enctype="multipart/form-data">
尽管我建议您使用更长的动作名称,因为您可能在多个控制器中添加了动作名称,这可能会导致问题。
所有内容都在文档中,请仔细阅读。