在下面的代码中,我们有一个视图即。 fruitPicker.html
所以关于bodyParser应该如何填充req.body
app.js:
var express = require('express')
, app = express()
, cons = require('consolidate');
app.engine('html', cons.swig);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
app.use(express.bodyParser());
app.use(app.router);
// Handler for internal server errors
function errorHandler(err, req, res, next) {
console.error(err.message);
console.error(err.stack);
res.status(500);
res.render('error_template', {error: err});
}
app.use(errorHandler);
app.get('/', function(req, res, next) {
res.render('fruitPicker', {
'fruits' : ['apple', 'orange', 'banana', 'peach']
});
});
app.post('/favorite_fruit', function(req,res,next) {
var favorite = req.body.fruit;
if (typeof favorite == 'undefined') {
next(Error('Please choose a fruit!'));
}
else {
res.send("Your favorite fruit is " + favorite);
}
});
app.listen(3030);
console.log('Express server listening on port 3030');
fruitPicker.html:
<html>
<head><title>Fruit Picker</title></head>
<body>
<form action="/favorite_fruit" method="POST">
<p>What is your favorite fruit?</p>
{% for fruit in fruits %}
<p>
<input type="radio" name="fruit" value="{{fruit}}">{{fruit}}</input>
</p>
{% endfor %}
<input type="submit" value="Submit" />
</form>
</body>
</html>
<!doctype HTML>
如果我们有几个观点,比如说fruitPicker.html
和drinksPicker.html
怎么办?我想bodyParser
会从我们来自的当前最新视图中填充req.body
,这是正确的吗?然后我们如何将这些信息传达给app.post
,以便帖子可以根据每个信息返回不同的响应(您最喜欢的水果是......或者您最喜欢的饮料是......)?我们只有一个通用变量req.body
,它不区分水果和饮料,那么app.post
将如何知道?是否仅由我们命名不同的名称,并为收藏夹指定req.body.fruit
或req.body.drink
?这看起来不是很强大,因为我们可能会遇到无意中输入无线电盒名称相同的实例(毕竟它们位于不同的文件中)并且可以进行硬调试,不是吗?如果bodyParser建立在它来自的后向跟踪路径中,那么它会更好吗?
答案 0 :(得分:0)
你可以这样做:
for(var x in req.body){
if(x=='fruit'){
res.send("Your favorite fruit is " + req.body[x] );
}
else if(x=='drink'){
res.send("Your favorite drink is " + req.body[x] );
}
}