我是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错误。
答案 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});
}
}