无法在查询中分配request.payload值

时间:2018-07-11 20:32:33

标签: node.js mongodb hapijs

我正在使用Node / Hapi / Mongodb开发一个简单的应用程序,但是遇到了一个奇怪的问题。以下是处理分数添加/更新的方法;当我通过Insomnia / Postman向该端点发送一些数据时,它可以按预期工作。但是,当此POST来自其他应用程序时,我得到的结果很奇怪。每个字段的值始终为null(同样,仅当POST来自另一个站点时才会发生,但是我已经注销了请求有效负载,可以看到数据是正确的,只是在分配给对象时设置为null ,或尝试使用它作为查询)

server.route({
    method: 'POST',
    path: '/update-score',
    handler: (request, h) => {
        var scores = db.collection('scores');

        var updateScore = new Promise((resp, rej) => {
            console.log('payload ', request.payload);
            scores.findOneAndUpdate({customerID: request.payload.customerID}, {$set: {customerID: request.payload.customerID, customerName: request.payload.customerName, highScore: request.payload.highScore}}, {upsert: true}, (err, res) => {
                if (err) {
                    return rej(err);
                }
                else {
                    return resp(res);
                }
            })
        });

        return updateScore;
    }
});

控制台正确注销了请求有效负载,但是在查询尝试使用它时为null / undefined。我还尝试过在mongo方法调用之外创建两个对象(如下所示),并且在控制台将这些预定义对象记录下来之后,那里的值也为null。即使我可以在定义这些对象后console.log request.payload,数据也很好。

server.route({
    method: 'POST',
    path: '/update-score',
    handler: (request, h) => {
        var scores = db.collection('scores');

        var queryObj = { 
           customerID: request.payload.customerID
        };

        var updateObj = {
           $set: {
              customerName: request.payload.customerName,
              highScore: request.payload.highScore
           }
        }
        var updateScore = new Promise((resp, rej) => {
            console.log('again ', request.payload);
            scores.findOneAndUpdate(queryObj, updateObj, {upsert: true}, (err, res) => {
                if (err) {
                    return rej(err);
                }
                else {
                    return resp(res);
                }
            })
        });

        return updateScore;
    }
});

即使我可以记录request.payload并正确查看数据,记录queryObjvalueObj也会显示所有值null。为什么我不能在任何地方使用request.payload值?

1 个答案:

答案 0 :(得分:0)

长话短说,Insomnia / Postman发送一个对象作为POST正文,但我使用JSON编码来自应用程序的POST;只需在服务器上解析它!