Javascript 当我有了密钥和值时,为什么会出现错误?

Javascript 当我有了密钥和值时,为什么会出现错误?,javascript,node.js,express,Javascript,Node.js,Express,接收到错误“请求字段中缺少firstName”,即使我输入了firstName键并填写了值的请求。有人有什么想法吗?我真的需要帮助,因为我是新手。作者是一个猫鼬收藏,我试图通过“如果”语句返回作者列表 app.post('/authors', function (req, res) { const requiredFields = ['firstName', 'lastName', 'userName']; requiredFields.forEach(field => { if

接收到错误“请求字段中缺少firstName”,即使我输入了firstName键并填写了值的请求。有人有什么想法吗?我真的需要帮助,因为我是新手。作者是一个猫鼬收藏,我试图通过“如果”语句返回作者列表

app.post('/authors', function (req, res) {
const requiredFields = ['firstName', 'lastName', 'userName'];
requiredFields.forEach(field => {
    if (!(field in req.body)) {
        const message = `Missing \`${field}\` in request body`;
        console.error(message);
        return res.status(400).send(message);
    }
});

Author
    .findOne({
        userName: req.body.userName
    })
    .then(author => {
        if (author) {
            const message = `Username already taken`;
            console.error(message);
            return res.status(400).send(message);
        } else {
            Author
                .create({
                    firstName: req.body.firstName,
                    lastName: req.body.lastName,
                    userName: req.body.userName
                })
                .then(author => res.status(201).json({
                    _id: author.id,
                    name: `${author.firstName} ${author.lastName}`,
                    userName: author.userName
                }))
                .catch(err => {
                    console.error(err);
                    res.status(500).json({
                        error: 'Something went wrong'
                    });
                });
        }
    })
    .catch(err => {
        console.error(err);
        res.status(500).json({
            error: 'Something went really really wrong'
        });
    });
});

解决方案可以是以下任意一种

  • 检查是否正确使用了主体解析器(取决于您的输入)
  • const express=require('express');
    常量app=express();
    const bodyParser=require('body-parser');
    app.use(bodyParser.json());//支持json编码的实体
    app.use(bodyParser.urlencoded({extended:true}));//支持编码体
    app.post('/authors',函数(req,res){
    const requiredFields=['firstName','lastName','userName'];
    控制台日志(请求主体);
    requiredFields.forEach(字段=>{
    如果(!(请求正文中的字段)){
    const message=`Missing\`${field}`在请求体`;
    控制台错误(消息);
    返回res.status(400)。发送(消息);
    }
    });
    //你的其他代码
    });
    
  • 请确保在请求中使用以下标题
  • 内容类型:application/json


    满足所有条件后,我使上述代码正常运行。

    如果您使用Express 4.16.0或更高版本,您可以使用以下选项:
    app.use(express.json())

    请解释您试图实现的结果,以及请求的主体是什么。还有什么是作者?这是猫鼬收藏吗?你可能想在问题中提到这一点。谢谢你,我编辑了这篇文章。Yes Author是mongoose集合,我正在尝试检索集合中的作者列表。是否转储/检查
    req.body
    ?价值是什么?您是否使用了正确的中间件?我将如何转储/检查req.body?我没有听说过。我尝试了身体分析器,但没什么不同。当我运行get请求时,我获得了作者的集合,这些作者可能是