【问题标题】:The 'req.body' on Express.js v^4.17.1 returns 'undefined' from post requestsExpress.js v^4.17.1 上的“req.body”从发布请求中返回“未定义”
【发布时间】:2020-11-04 04:54:08
【问题描述】:

我一直在尝试将一些东西发送到我的shoutbox_endpoint,但是在端点所在的 Express.JS 后端上,它返回 req.bodyundefined

发布请求

const headers = {
    "SMN-Auth-JWT": " REDACTED "
};

axios.post(this.endpoint_shoutbox, {
    headers: headers,
    data: {
        user: who,
        message: message,
    }
}).then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
});

后端端点

router.post('/shoutbox-relay', async (req, res) => {
    console.log(req.params); // {} 
    console.log(req.query); // {}
    console.log(req.body); // Undefined   
});

Main.js

const Logger = require("./LogHandler");
const config = require("../Settings/conf.json");
const Path = require("path");
const ExpressJS = require("express");
const Router = require("./RouterHandler");
const bodyParser = require('body-parser');
const app = ExpressJS();

module.exports.start = async (client) => {
    try {
        app.set("view engine", "ejs");
        app.use("/assets", ExpressJS.static(Path.join(__dirname, "../Website/assets")));
        app.use("/socket.io", ExpressJS.static(Path.join(__dirname, "../Website/assets/socket.io")));
        app.set("views", Path.join(__dirname, "../Website/views"));

        app.use(bodyParser.json());
        app.use(bodyParser.urlencoded({ extended: true }));
        app.disable("x-powered-by");
    
        app.use(function (req, res, next) {
            req.bot = client;
            next();
        });
        app.use("/", Router.index);
        app.use("/about", Router.about);
        app.use("/chat", Router.chat);
        app.use(function (req, res, next) {
            var err = new Error("File Not Found");
            err.status = 404;
            next();
        });

        const Listener = http.listen(config.Website.port, function () {
            Logger.log("Website Handler", "Webserver Started.");
        });
    } catch (err) {
        Logger.error("Website Handler", `Webserver failed to load due to: ${err}`);
    }
};

【问题讨论】:

  • 你用过body-parser吗?
  • Smh...你在开玩笑吗...如果这是答案我会很尴尬xD
  • @Anatoly 不幸的是,即使使用 body-parser 它也会做同样的事情
  • 如果body-parser也没有帮助,您能否提供更新后的脚本来说明您是如何使用它的?

标签: node.js express ejs router


【解决方案1】:

一个观察结果是,客户端 JavaScript 上的 DATA 不是 JSON 字符串化的。我更喜欢提及 contentType: 'application/json'

这是我最后的一个示例,它几乎可以与您的配置配合使用。

客户端 JS:

function saveBankDetails() {
    someDetails =  { bankDetails: {
        someKey1:   "SOME VALUE 1,
        someKey2: "SOME VALUE 2"
     }
    }
    $.ajax({
        url: ("SOME PATH"),
        method: 'POST',
        data: JSON.stringify(someDetails),
        contentType: 'application/json'
    })
    .done(function(data, textStatus, jXhr) {
        console.log(data);
    })
    .fail(function(jXhr) {
        console.log('failure')
        console.log(jXhr)
    });    

}

服务器端代码:

router.post('SOME PATH', async (req,  res) {
    console.log(req.body.bankDetails)
});

输出:

 {
        someKey1:   "SOME VALUE 1,
        someKey2: "SOME VALUE 2"
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2012-02-28
    • 2021-01-28
    相关资源
    最近更新 更多