Nodejs express 服务器如何获得ajax post方法提交的参数?

Nodejs express 服务器如何获得ajax post方法提交的参数?

服务器使用req.body.XXX获取不到,而且显示req.body为undefined, 用res.json回送的数据客户端可以收到。 请问应该如何获取参数??? 感谢各位的回答与意见!

10 回复

当然可以。以下是一个关于如何在 Node.js 中使用 Express 框架来获取通过 AJAX 发送的 POST 请求参数的详细解答。

解释

首先,你需要确保在你的 Express 应用中安装并正确配置了 body-parser 中间件。这是因为默认情况下,Express 不会解析请求体中的数据。body-parser 可以帮助你解析这些数据,并将其放在 req.body 属性中。

安装 body-parser

你可以通过运行以下命令来安装 body-parser

npm install --save body-parser

配置 body-parser

在你的 Express 应用中配置 body-parser 如下:

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

const app = express();

// 使用body-parser中间件解析请求体
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.post('/submit', (req, res) => {
    // 现在可以通过 req.body 访问到POST请求体中的数据
    const data = req.body;
    console.log(data); // 打印出接收到的数据
    res.json({ message: '数据已接收', receivedData: data });
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

在这个例子中,我们创建了一个简单的 Express 应用,并设置了一个 POST 路由 /submit。当从客户端发送一个 POST 请求到这个路由时,我们可以使用 req.body 来访问请求体中的数据。

客户端示例

假设客户端使用 jQuery 的 AJAX 方法发送数据:

$.ajax({
    url: '/submit',
    method: 'POST',
    data: { key1: 'value1', key2: 'value2' },
    success: function(response) {
        console.log(response.message);
    }
});

或者使用原生 JavaScript 发送数据:

fetch('/submit', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({ key1: 'value1', key2: 'value2' })
})
.then(response => response.json())
.then(data => console.log(data.message))
.catch(error => console.error('Error:', error));

通过以上步骤,你可以成功地在 Express 服务器上获取通过 AJAX POST 方法提交的参数。


感谢回答,可是还是没有数据,undefined,而且post的数据不是通过body接受吗?

var express = require('express');
var bodyParser = require('body-parser');

var app = express();

// see https://github.com/expressjs/body-parser
// 添加 body-parser 中间件就可以了
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

app.post('/', function (req, res) {
    console.log('req.body', req.body);
    res.send({airead: 'fan'});
});

app.listen(8888);

//  shell
//
// $ curl -d'fan=airead' localhost:8888
// {"airead":"fan"}%

感谢回答,我试试~

app.use(logger(‘dev’)); app.use(bodyParser.json()); app.use(bodyParser.urlencoded());

var c={a:a,b:b,c:c……} $.post("/ajax/autoprint",c,function(data){ //somefunctions })

console.log(req.body)

感谢,解决了,还有个问题想请教,如果客户端提交的dataType为html,服务器如何接受?

感谢大家的回答,问题解决了,还有个问题想请教大家,如果客户端提交的dataType为html,服务器如何接受?

要写中间件。 EXPRESS默认的中间件只支持 JSON和urlencoded 我自己写了XML版中间件 但是HTML版。要你自己写了。或者你把HTML封在JSON里传。

要在Node.js中使用Express框架处理AJAX POST请求,并从请求体中获取参数,你需要确保以下几点:

  1. 安装必要的中间件:使用body-parserexpress.json()来解析请求体中的数据。推荐使用Express内置的express.json()

  2. 配置路由:设置一个路由来处理POST请求,并从req.body中获取参数。

示例代码

首先,确保你的项目中已安装了Express。如果还没有安装,可以通过npm安装:

npm install express

接下来,创建一个简单的Express应用来接收AJAX POST请求:

const express = require('express');
const app = express();

// 使用express.json()中间件来解析JSON格式的请求体
app.use(express.json());

// 定义一个处理POST请求的路由
app.post('/submit', (req, res) => {
    // 从请求体中获取参数
    const paramValue = req.body.paramName;

    // 检查是否成功获取到参数
    if (paramValue) {
        console.log('Received parameter:', paramValue);
        res.json({ message: 'Parameter received successfully', value: paramValue });
    } else {
        res.status(400).json({ error: 'Parameter not found' });
    }
});

// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

前端AJAX请求示例(使用jQuery)

$.ajax({
    url: '/submit',
    method: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ paramName: 'someValue' }),
    success: function(response) {
        console.log('Success:', response.message);
    },
    error: function(error) {
        console.error('Error:', error);
    }
});

解释

  • app.use(express.json()):这行代码让Express应用能够解析传入的JSON数据。
  • req.body.paramName:在处理POST请求时,你可以通过req.body对象访问到POST请求体中的参数。
  • 如果前端发送的数据格式不正确或者没有安装express.json(),则req.body将为空或undefined

确保前端发送的请求体格式与后端期望的格式匹配,通常情况下是JSON格式。这样,后端就能正确解析并获取到这些参数。

回到顶部