Node.js + Express POST 请求返回未定义

Posted

技术标签:

【中文标题】Node.js + Express POST 请求返回未定义【英文标题】:Node.js + Express POST request returns undefined 【发布时间】:2021-01-05 08:36:45 【问题描述】:

我在后端有 Node.js + express 并尝试解析简单 POST 请求的正文。 但结果是在服务器控制台上得到“未定义”。

我尝试了很多我在 *** 上找到的选项 - 没有任何效果。 (似乎版本中不需要 body-parser。但它不起作用即使包含)。

以下是我的代码示例:

Node.js 配置(Express 版本:express@4.17.1):

var express = require('express');
var app = express();
const path = require('path');
const PORT = process.env.PORT || 5000;

let ejs = require('ejs');

app.use(express.json());
app.use(express.text());

/* ... Some code ... */

Node.js 路由:

  .use(express.static(path.join(__dirname, 'public')))
  .set('view engine', 'ejs')
  .post('/gaapi-post', function(req, res)
    console.log('***** Post fields: ******');
    console.log(req.body);
  )  

POST 请求示例:

// jQuery JSON
jQuery.ajax(
    url: '/gaapi-post',
    type: 'POST',
    contentType: 'application/json',
    data:  "x": "5", "y": "6" , // Valid JSOP should have " instead of '
);

// jQuery simple text
$.post( "/gaapi-post", 'test');


// Curl in console
curl -H "Content-Type: application/json" -X POST -d '"username":"xyz","password":"xyz"' http://localhost:5000/gaapi-post

上面的代码有什么可以改变或改进的?

提前致谢!

【问题讨论】:

【参考方案1】:

默认情况下,req.body 是未定义的,并且在您使用 body-parser 和 multer 等正文解析中间件时填充。所以你需要使用这个中间件之一。 Express (4.x) 已将 body-parser 中间件从核心框架中分离出来。所以,如果你需要body-parser,你需要单独安装:

npm install body-parser --save

这是body-parser的代码示例:

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

// for parsing application/json
app.use(bodyParser.json());

// for parsing application/x-www-form-urlencoded
app.use(bodyParser.urlencoded( extended: true )); 

【讨论】:

以上是关于Node.js + Express POST 请求返回未定义的主要内容,如果未能解决你的问题,请参考以下文章

如何从 node.js Express 发送 POST 请求?

如何在 express node.js POST 请求中接收 JSON?

如何发送 POST 请求以响应 node.js Express?

使用颤振客户端向 node.js express api 发出 post 请求

node.js express环境下POST 中文时注意的地方

Node.js/ Express POST 请求正文被解析为不正确的 JSON