여기 내 간단한 양식이 있습니다.
<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>
내 Express.js /Node.js 코드 는 다음과 같습니다 .
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
나는 sReq.query.email
또는 sReq.query['email']
또는 sReq.params['email']
등등을 시도했다 . 그들 중 어느 것도 효과가 없다. 그들은 모두 돌아온다 undefined
.
Get call로 변경하면 작동하므로 .. 어떤 아이디어?
답변
Express 4.16.0 부터 상황이 다시 변경 되었으므로 이제 Express 3.0 에서 express.json()
와 express.urlencoded()
마찬가지로 사용할 수 있습니다 .
이이었다 다른 시작 4.15에 익스프레스 4.0 :
$ npm install --save body-parser
그리고:
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
}));
나머지는 Express 3.0과 같습니다.
먼저 본문의 게시물 데이터를 구문 분석하려면 미들웨어를 추가해야합니다.
다음 코드 줄 중 하나 또는 둘 다를 추가하십시오.
app.use(express.json()); // to support JSON-encoded bodies
app.use(express.urlencoded()); // to support URL-encoded bodies
그런 다음 핸들러에서 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;
// ...
});
사용을 express.bodyParser()
권장하지 않습니다.
app.use(express.bodyParser());
… 다음과 같습니다 :
app.use(express.json());
app.use(express.urlencoded());
app.use(express.multipart());
에 보안 문제가 express.multipart()
있으므로 필요한 특정 인코딩 유형에 대한 지원을 명시 적으로 추가하는 것이 좋습니다. 멀티 파트 인코딩이 필요한 경우 (예를 들어 파일 업로드를 지원하기 위해)이 내용을 읽어야합니다 .
답변
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
연결 3.0 (Express가 확장되는) 해제 될 때.
간단히 말해, 대신에 …
app.use(express.bodyParser());
… 사용해야합니다
app.use(express.urlencoded());
app.use(express.json()); // if needed
멀티 파트 양식 (파일 업로드)을 처리해야하는 경우, 타사, 버스 보이, 다이 서 등과 같은 타사 라이브러리 또는 미들웨어를 사용하십시오.
답변
참고 :이 답변은 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
});
원래 연결 전용 버전은 다음과 같습니다.
// 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;;
});
})
);
쿼리 문자열과 본문은 하위 수준 라이브러리 대신 Rails 스타일의 매개 변수 처리 ( qs
)를 사용하여 구문 분석됩니다 . 로 반복되는 매개 변수를 구문 분석 하려면 매개 변수에 대괄호가 있어야 합니다. 또한 중첩 맵을 지원합니다. bodyParser는 HTML 양식 제출 구문 분석 외에도 JSON 요청을 자동으로 구문 분석 할 수 있습니다.querystring
qs
name[]=val1&name[]=val2
편집 : express.js를 읽고 Express 사용자에게 더 자연스러운 답변을 수정했습니다.
답변
미들웨어없이 게시 된 쿼리를 작성하려는 경우이 작업을 수행합니다.
app.post("/register/",function(req,res){
var bodyStr = '';
req.on("data",function(chunk){
bodyStr += chunk.toString();
});
req.on("end",function(){
res.send(bodyStr);
});
});
브라우저로 전송합니다
email=emailval&password1=pass1val&password2=pass2val
그래도 미들웨어를 사용하는 것이 좋을 것이므로 각 경로에서 이것을 반복해서 쓸 필요가 없습니다.
답변
Express 4 사용자를위한 참고 사항 :
당신이 시도하고 넣어 경우 app.use(express.bodyParser());
귀하의 응용 프로그램에 당신이 당신의 Express 서버를 시작하려고하면 다음과 같은 오류가 발생합니다 :
오류 : bodyParser와 같은 대부분의 미들웨어는 더 이상 Express와 번들로 제공되지 않으며 별도로 설치해야합니다. https://github.com/senchalabs/connect#middleware를 참조 하십시오 .
npm 과 body-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();
})
답변
주어진 형태 :
<form action='/somepath' method='post'>
<input type='text' name='name'></input>
</form>
급행 사용
app.post('/somepath', function(req, res) {
console.log(JSON.stringify(req.body));
console.log('req.body.name', req.body['name']);
});
산출:
{"name":"x","description":"x"}
req.param.name x
답변
백엔드 :
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);
});
프론트 엔드 :
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
});