在nodemon上运行的express.js服务器的工作方式与节点上的不同

时间:2017-12-08 05:46:21

标签: node.js postman nodemon

我的 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测试了请求。

1 个答案:

答案 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);
    }
});