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提交的数据
当然可以。根据你的描述,问题在于如何通过 Express 获取 POST 请求中的数据。默认情况下,Express 并不会解析请求体中的数据,因此我们需要使用中间件来帮助我们完成这一任务。
以下是一个解决方案,包括了 Express 应用的设置以及如何从 POST 请求中获取数据的示例代码:
安装必要的依赖
首先确保你已经安装了 express
和 body-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');
});
解释
- 引入Express:首先,引入 Express 模块。
- 创建应用实例:创建一个 Express 应用实例。
- 使用中间件:使用
express.json()
和express.urlencoded()
中间件来解析请求体中的 JSON 和 URL 编码数据。 - 定义路由:在
/views/validation.html
路径上定义一个 POST 路由,该路由接收 POST 请求并打印req.body
中的数据。 - 启动服务器:最后,启动服务器监听端口 3000。
现在,当向 /views/validation.html
发送 POST 请求时,你应该能够正确地从 req.body
获取到表单数据。