Nodejs express post提交获取参数的问题

Nodejs express post提交获取参数的问题

RT: app.post(’/views/validation.html’,function(req,res){ console.log(req.body); });

post 到这个页面的时候, 答应出undefiend; 客户端的form 代码如下: <form id=“text_form” method=“POST” action="/views/validation.html"> name:<input type=“text” id=“name”></ br> age:<input type=“text” id=“age”></ br> <input class=“submit” type=“submit” value=“提交”/> </form> 求 怎么获取post提交的数据


9 回复

当然可以。根据你的描述,问题在于如何通过 Express 获取 POST 请求中的数据。默认情况下,Express 并不会解析请求体中的数据,因此我们需要使用中间件来帮助我们完成这一任务。

以下是一个解决方案,包括了 Express 应用的设置以及如何从 POST 请求中获取数据的示例代码:

安装必要的依赖

首先确保你已经安装了 expressbody-parser(或 express 的新版本中内置的 express.json()express.urlencoded() 中间件):

npm install express

如果你使用的是旧版本的 Express(<4.16.0),还需要安装 body-parser

npm install body-parser

示例代码

使用 express.json()express.urlencoded()

如果你使用的是 Express >= 4.16.0 版本,可以直接使用内置的中间件:

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

// 使用内置中间件解析 JSON 和 URL-encoded 数据
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.post('/views/validation.html', (req, res) => {
    console.log(req.body); // 输出 { name: '输入的名字', age: '输入的年龄' }
    
    // 返回响应
    res.send('数据已接收');
});

app.listen(3000, () => {
    console.log('服务器运行在 http://localhost:3000');
});

使用 body-parser(适用于旧版本 Express)

如果你使用的是旧版本的 Express,需要安装并配置 body-parser

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

// 使用 body-parser 中间件解析 JSON 和 URL-encoded 数据
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/views/validation.html', (req, res) => {
    console.log(req.body); // 输出 { name: '输入的名字', age: '输入的年龄' }
    
    // 返回响应
    res.send('数据已接收');
});

app.listen(3000, () => {
    console.log('服务器运行在 http://localhost:3000');
});

解释

  • express.json()express.urlencoded() 是 Express 内置的中间件,用于解析 JSON 和 URL-encoded 格式的请求体。
  • bodyParser.json()bodyParser.urlencoded()body-parser 库提供的功能,用于解析 JSON 和 URL-encoded 格式的请求体。
  • 在路由处理函数中,你可以通过 req.body 访问到解析后的请求体数据。

这样设置后,当你提交表单时,Express 将能够正确地解析并访问到 POST 请求中的数据。


app.post? 你自己改写了吧。 不是router.post么。其他逻辑上没什么问题。

var express = require(‘express’); var router = express.Router(); router.post 这样试试

//app.js var routes = require(’…/route’); …… 在app.use(express.static(path.join(__dirname, ‘…/public’)));app.use(cookieParser(’*’));之后插入 app.use(router) // route/index.js var express = require(‘express’); var router = express.Router(); router.post(’/views/validation.html’,function(req,res){ console.log(req.body); });

var express = require(‘express’); var ejs = require(‘ejs’); var sio = require(‘socket.io’); var app = express();

var urlrouter = express.Router(); app.set(‘view engine’,‘html’); app.set(‘views’,dirname+"/views"); app.set(‘view option’,{layout:false}); app.engine(’.html’, ejs.express); app.use(express.static(__dirname+’/public’)); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json());

urlrouter.post(’/’,function(req,res){ if(req.query.name!=null) { console.log(req.query.name); } else { res.send(‘err’); console.log(‘err’); } });

urlrouter.get(’/’,function(req,res){ res.render(‘index’); }); urlrouter.get(’/views/*.html’,function(req,res){ res.render(req.params[0]); //console.log(req.query.id); });

urlrouter.post(’/views/validation.html’,function(req,res){ console.log(req.body); });

应用下bodyParser: app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json());

是一个connect,express的中间件。安装了express就有的吧

"cookie-parser": "~1.0.1",
"body-parser": "~1.0.0",

加进去之后在根目录 npm install一次

在使用 Express 处理 POST 请求时,如果直接通过 req.body 访问表单数据,通常会遇到 undefined 的问题。这是因为 Express 默认不会解析请求体中的数据。为了正确处理这些数据,需要使用一个中间件来解析请求体,比如 body-parser 或者在较新的版本中使用 express.json()express.urlencoded()

示例代码

首先,确保你已经安装了 express

npm install express

然后,在你的项目中设置 express 并使用中间件来解析请求体:

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

// 使用中间件解析JSON格式的数据
app.use(express.json());

// 使用中间件解析urlencoded格式的数据
app.use(express.urlencoded({ extended: true }));

app.post('/views/validation.html', function (req, res) {
    console.log(req.body); // 应该输出类似 { name: '输入的名字', age: '输入的年龄' }
    res.send('Data received!');
});

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

解释

  1. 引入Express:首先,引入 Express 模块。
  2. 创建应用实例:创建一个 Express 应用实例。
  3. 使用中间件:使用 express.json()express.urlencoded() 中间件来解析请求体中的 JSON 和 URL 编码数据。
  4. 定义路由:在 /views/validation.html 路径上定义一个 POST 路由,该路由接收 POST 请求并打印 req.body 中的数据。
  5. 启动服务器:最后,启动服务器监听端口 3000。

现在,当向 /views/validation.html 发送 POST 请求时,你应该能够正确地从 req.body 获取到表单数据。

回到顶部