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

时间:2020-09-18 11:46:26

标签: jquery node.js express post body-parser

我在后端使用Node.js +表达,并尝试解析简单POST请求的主体。 但是结果是服务器控制台上出现“未定义”。

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

下面是我的代码示例:

Node.js配置(快速版本: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 个答案:

答案 0 :(得分:0)

默认情况下,req.body是未定义的,并且在使用诸如body-parser和multer之类的用于解析正文的中间件时填充。因此,您需要使用此中间件之一。 Express(4.x)已将主体解析器中间件与核心框架分离。因此,如果您需要主体解析器,则需要单独安装:

npm install body-parser --save

这是正文解析器的代码示例:

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 }));