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 请求返回未定义的主要内容,如果未能解决你的问题,请参考以下文章