mur*_*lai 746 javascript post node.js express
这是我的简单形式:
<form id="loginformA" action="userlogin" method="post">
<div>
<label for="email">Email: </label>
<input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>
</form>
Run Code Online (Sandbox Code Playgroud)
这是我的Express.js /Node.js代码:
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
Run Code Online (Sandbox Code Playgroud)
我试过sReq.query.email或sReq.query['email']或sReq.params['email']等他们都没有工作.他们都回来了undefined.
当我改为Get电话时,它有效,所以..任何想法?
Dre*_*kes 1211
事情已经改变,再次启动Express 4.16.0,你现在可以使用express.json(),express.urlencoded()就像在Express 3.0中一样.
这是不同的首发快递4.0至4.15:
$ npm install --save body-parser
Run Code Online (Sandbox Code Playgroud)
然后:
var bodyParser = require('body-parser')
app.use( bodyParser.json() ); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
Run Code Online (Sandbox Code Playgroud)
其余的就像在Express 3.0中一样:
首先,您需要添加一些中间件来解析正文的帖子数据.
添加以下一行或两行代码:
app.use(express.json()); // to support JSON-encoded bodies
app.use(express.urlencoded()); // to support URL-encoded bodies
Run Code Online (Sandbox Code Playgroud)
然后,在您的处理程序中,使用req.body对象:
// assuming POST: name=foo&color=red <-- URL encoding
//
// or POST: {"name":"foo","color":"red"} <-- JSON encoding
app.post('/test-page', function(req, res) {
var name = req.body.name,
color = req.body.color;
// ...
});
Run Code Online (Sandbox Code Playgroud)
请注意,express.bodyParser()不建议使用.
app.use(express.bodyParser());
Run Code Online (Sandbox Code Playgroud)
......相当于:
app.use(express.json());
app.use(express.urlencoded());
app.use(express.multipart());
Run Code Online (Sandbox Code Playgroud)
存在安全问题express.multipart(),因此最好明确添加对所需特定编码类型的支持.如果您确实需要多部分编码(例如,支持上传文件),那么您应该阅读此内容.
Sea*_*nch 86
使用express.bodyParser()的安全问题
而所有其他的答案目前推荐使用的express.bodyParser()中间件,这其实是围绕着一个包装express.json(),express.urlencoded()和express.multipart()中间件(http://expressjs.com/api.html#bodyParser).表单请求主体的解析由express.urlencoded()中间件完成,是您在req.body对象上公开表单数据所需的全部内容.
由于安全问题如何express.multipart()/ connect.multipart()为所有上传的文件创建临时文件(并且不是垃圾收集),现在建议不要使用express.bodyParser()包装器,而是仅使用您需要的中间件.
注意:connect.bodyParser()很快将更新为仅包含urlencoded和json何时发布Connect 3.0(Express扩展).
简而言之,而不是......
app.use(express.bodyParser());
Run Code Online (Sandbox Code Playgroud)
......你应该用
app.use(express.urlencoded());
app.use(express.json()); // if needed
Run Code Online (Sandbox Code Playgroud)
如果/当您需要处理多部分表单(文件上传)时,请使用第三方库或中间件,如multiparty,busboy,dicer等.
yon*_*ran 82
注意:这个答案适用于Express 2.请参阅此处了解Express 3.
如果你使用的是connect/express,你应该使用bodyParser中间件:它在Expressjs指南中有描述.
// example using express.js:
var express = require('express')
, app = express.createServer();
app.use(express.bodyParser());
app.post('/', function(req, res){
var email = req.param('email', null); // second parameter is default
});
Run Code Online (Sandbox Code Playgroud)
这是原始的仅连接版本:
// example using just connect
var connect = require('connect');
var url = require('url');
var qs = require('qs');
var server = connect(
connect.bodyParser(),
connect.router(function(app) {
app.post('/userlogin', function(req, res) {
// the bodyParser puts the parsed request in req.body.
var parsedUrl = qs.parse(url.parse(req.url).query);
var email = parsedUrl.email || req.body.email;;
});
})
);
Run Code Online (Sandbox Code Playgroud)
使用Rails样式的参数handling(qs)而不是低级querystring库来解析查询字符串和正文.为了解析重复的参数qs,参数需要有括号:name[]=val1&name[]=val2.它还支持嵌套映射.除了解析HTML表单提交之外,bodyParser还可以自动解析JSON请求.
编辑:我读了express.js并修改了我的答案,以便对Express用户更自然.
med*_*116 31
如果您想在没有中间件的情况下构建已发布的查询,这将执行此操作:
app.post("/register/",function(req,res){
var bodyStr = '';
req.on("data",function(chunk){
bodyStr += chunk.toString();
});
req.on("end",function(){
res.send(bodyStr);
});
});
Run Code Online (Sandbox Code Playgroud)
这将把它发送到浏览器
email=emailval&password1=pass1val&password2=pass2val
Run Code Online (Sandbox Code Playgroud)
尽管使用中间件可能更好,所以你不必在每条路线中反复写这个.
mpl*_*wis 24
Express 4用户注意事项:
如果您尝试将其app.use(express.bodyParser());放入应用程序,则在尝试启动Express服务器时会出现以下错误:
错误:大多数中间件(如bodyParser)不再与Express捆绑在一起,必须单独安装.请参阅https://github.com/senchalabs/connect#middleware.
您必须从npmbody-parser单独安装软件包,然后使用类似下面的内容(从GitHub页面获取的示例):
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser());
app.use(function (req, res, next) {
console.log(req.body) // populated!
next();
})
Run Code Online (Sandbox Code Playgroud)
小智 18
给定一些形式:
<form action='/somepath' method='post'>
<input type='text' name='name'></input>
</form>
Run Code Online (Sandbox Code Playgroud)
使用快递
app.post('/somepath', function(req, res) {
console.log(JSON.stringify(req.body));
console.log('req.body.name', req.body['name']);
});
Run Code Online (Sandbox Code Playgroud)
输出:
{"name":"x","description":"x"}
req.param.name x
Run Code Online (Sandbox Code Playgroud)
Chi*_*aka 14
app.use(express.bodyParser());
Run Code Online (Sandbox Code Playgroud)
然后,对于app.post请求,您可以通过获取发布值req.body.{post request variable}.
yee*_*lan 14
从Express中删除以下中间件.
直接使用中间件时就像在Express 3.0中那样.您将收到以下错误:
Error: Most middleware (like urlencoded) is no longer bundled with Express and
must be installed separately.
Run Code Online (Sandbox Code Playgroud)
为了利用这些中间件,现在你需要分别为每个中间件做npm.
由于bodyParser被标记为已弃用,因此我建议使用json,urlencode和multipart解析器(如formidable,connect-multiparty)以下方式.(也不推荐使用多部分中间件).
还要记住,只需定义urlencode + json,就不会解析表单数据,也不会定义req.body.您需要定义一个中间件处理多部分请求.
var urlencode = require('urlencode');
var json = require('json-middleware');
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.use(json);
app.use(urlencode);
app.use('/url/that/accepts/form-data', multipartMiddleware);
Run Code Online (Sandbox Code Playgroud)
lak*_*are 13
后端:
import express from 'express';
import bodyParser from 'body-parser';
const app = express();
app.use(bodyParser.json()); // add a middleware (so that express can parse request.body's json)
app.post('/api/courses', (request, response) => {
response.json(request.body);
});
Run Code Online (Sandbox Code Playgroud)
前端:
fetch("/api/courses", {
method: 'POST',
body: JSON.stringify({ hi: 'hello' }), // convert Js object to a string
headers: new Headers({ "Content-Type": "application/json" }) // add headers
});
Run Code Online (Sandbox Code Playgroud)
更新
从Express version 4.16+.
您可能在代码中添加了如下所示的一行:
app.use(bodyparser.json()); //utilizes the body-parser package
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 Express 4.16+,您现在可以将该行替换为:
app.use(express.json()); //Used to parse JSON bodies
Run Code Online (Sandbox Code Playgroud)
由于 express.json() 中的代码基于 bodyparser.json(),因此这不应在您的应用程序中引入任何破坏性更改。
如果您的环境中还有以下代码:
app.use(bodyParser.urlencoded({extended: true}));
Run Code Online (Sandbox Code Playgroud)
您可以将其替换为:
app.use(express.urlencoded()); //Parse URL-encoded bodies
Run Code Online (Sandbox Code Playgroud)
最后要注意的是:仍然有一些非常特殊的情况body-parser可能仍然是必要的,但在大多数Express情况下,body-parser 的实现是大多数用例所需要的。
(有关更多详细信息,请参阅expressjs/bodyparser 上的文档)。
由于大多数答案都用于Express,bodyParser,connect; 不推荐使用multipart的地方.有一种安全的方式可以轻松发送多部分对象.
Multer可以用作connect.multipart()的替代品.
安装包
$ npm install multer
Run Code Online (Sandbox Code Playgroud)
将其加载到您的应用中:
var multer = require('multer');
Run Code Online (Sandbox Code Playgroud)
然后,将其与其他表单解析中间件一起添加到中间件堆栈中.
app.use(express.json());
app.use(express.urlencoded());
app.use(multer({ dest: './uploads/' }));
Run Code Online (Sandbox Code Playgroud)
connect.json()处理application/json
connect.urlencoded()处理application/x-www-form-urlencoded
multer()处理multipart/form-data
我正在寻找这个确切的问题.我按照上面的所有建议,但req.body仍然返回一个空对象{}.就我而言,它就像html不正确一样简单.
在表单的html中,请确保'name'在输入标记中使用该属性,而不仅仅是'id'.否则,不会解析任何内容.
<input id='foo' type='text' value='1'/> // req = {}
<input id='foo' type='text' name='foo' value='1' /> // req = {foo:1}
Run Code Online (Sandbox Code Playgroud)
我的白痴错误是你的好处.
你不应该使用app.use(express.bodyParser()).BodyParser是json + urlencoded + mulitpart的联合.你不应该使用它,因为multipart将在connect 3.0中被删除.
要解决此问题,您可以执行以下操作:
app.use(express.json());
app.use(express.urlencoded());
Run Code Online (Sandbox Code Playgroud)
非常重要的是知道应该在json和urlencoded之后使用app.use(app.router),否则它不起作用!
小智 5
请求流对我有用
req.on('end', function() {
var paramstring = postdata.split("&");
});
var postdata = "";
req.on('data', function(postdataChunk){
postdata += postdataChunk;
});
Run Code Online (Sandbox Code Playgroud)
写于 Express 4.16 版
在路由器函数中,您可以使用req.body属性来访问 post 变量。例如,如果这是POST您表单的路由,它会发回您输入的内容:
function(req,res){
res.send(req.body);
//req.body.email would correspond with the HTML <input name="email"/>
}
Run Code Online (Sandbox Code Playgroud)
给熟悉 PHP 的人 PS:为了访问$_GET我们使用的PHP变量,req.query以及访问$_POST我们req.body在 Node.js 中使用的PHP变量。
快递 v4.17.0
app.use(express.urlencoded( {extended: true} ))
app.post('/userlogin', (req, res) => {
console.log(req.body) // object
var email = req.body.email;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
711697 次 |
| 最近记录: |