req.body未定义使用express

时间:2018-02-03 01:37:52

标签: javascript json node.js express

我正在尝试将POST数据提取到运行express的node.js服务器。我确实在路线之前配置了bodyparser:

const
express = require('express'),
bodyParser = require('body-parser'),
app = express(),
twig = require('twig'),
server = app.listen(8000,"localhost",()=>{
    let host = server.address().address
    let port = server.address().port
    console.log("Running at http://" + host+ ":"+port)
})

app.use(bodyParser.json());
const routes = require('./src/route')(app)

这是我的控制器方法:

create: (req,res,next) => {
    console.log(req.body.title)
    return db.dev.create({
        title : req.body.title,
        description: req.body.description,
        reportedBy: req.body.reportedBy,
        sprintId: req.body.sprintId,
        estimated : req.body.estimated
    })
        .then((dev)=>res.json(dev))
        .catch((err)=>next(err))
}

事实上,console.log(req.body)总是给我一个未定义的值。

以下是我的客户发送的获取请求:

create(){
    return fetch("http://localhost:8000/devs",
        {
            method:"POST",
            mode:"no-cors",
            headers:{
                "Content-Type":"application/json",
                "Accept":"application/json",
                "Access-Control-Allow-Origin":"*"
            },
            body : JSON.stringify(this.state)
        }).then(()=>console.log(JSON.stringify(this.state))
}

我真的不知道我的问题可能来自哪里,使用Postman发布数据没有问题,JSON.stringify(this.state)返回一个漂亮且正确的JSON字符串。然后我假设问题来自我的API,但我不知道如何解决它。也许无人模式正在破坏我的要求?如果我没有设置它,我有一个“无法获取错误”。

我希望你们中的一些人会帮助我,因为我已经失去了一些头发试图解决这个问题。

非常感谢你的时间。

更新:我发现我的客户端没有发送“内容类型”标题,即使我在我的获取请求中设置了它。正在努力

1 个答案:

答案 0 :(得分:0)

您是否可以尝试重新排序服务器,使其看起来像这样

const
    express = require('express'),
    bodyParser = require('body-parser'),
    app = express(),
    twig = require('twig'),

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

const routes = require('./src/route')(app)

server = app.listen(8000,"localhost",()=>{
    let host = server.address().address
    let port = server.address().port
    console.log("Running at http://" + host+ ":"+port)
})