我的 server.js 如下所示:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
var ingredients = [
{
id:"i1",
text:'eggs'
},
{
id:'i2',
text:'milk'
},
{
id:'i3',
text:'bacon'
},
{
id:'i4',
text:'frog legs'
}
];
app.get('/',function (request,response){
response.send(ingredients);
});
app.post('/',function(request,response){
var ingredient = request.body;
if( !ingredient || ingredient.text===""){
response.status(500).send({error: "Your ingredient must have some text"});
}else {
ingredients.push(ingredient);
response.status(200).send(ingredients);
}
});
app.listen(3000, function () {
/* body... */
console.log('My first API running successfully on port 3000');
});
所以当我使用 node server.js 运行服务器并发送 POST 请求时,正文文本为
{"id":"i5","text":"cherries"}
它将对象推送到 ingredients 数组。但是当我使用 nodemon server.js 运行相同的文件时,它会推送一个空对象。此外,如果" text" 属性保留为空(也在nodemon方案中),它不会返回错误消息。社区中的任何人都可以帮助我理解为什么会这样吗?
P.S。 - 我使用POSTMAN测试了请求。
答案 0 :(得分:0)
你在数组中推送空白对象的原因是你没有在标题上传递application/json
。
而且你检查文字的条件也不对。
var ingredient = request.body;
if( !ingredient || ingredient.text===""){
//当您将request.body
分配给ingredient
时,如果没有数据,则为其分配{}
,当您检查if
条件!ingredient
时如果空白它有{}
,则在下一个条件ingredient.text
中返回undefined
,这不等于""
app.post('/',function(request,response){
console.log("post");
var ingredient = request.body;
if (!('text' in ingredient)){
// if(ingredient.text){
response.status(500).send({error: "Your ingredient must have some text"});
}else {
console.log("post1",ingredient);
ingredients.push(ingredient);
response.status(200).send(ingredients);
}
});