I've read dussins of * posts now but I can't get my bodyparser to work. In order to not complicate things I changed to the most simple thing I could imagine, which is the code below and involve just parsing one single route. Can anyone see a problem?
我现在已经阅读了*帖子的dussins,但我无法让我的bodyparser工作。为了不使事情变得复杂,我改变了我能想象到的最简单的事情,这是下面的代码,只涉及解析一条路线。有谁能看到问题?
routes/login.js
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
router.get('/', (req, res) => {
res.send('<form method="POST" action="'+ req.originalUrl +'"><input type="text" id="personalNumber" autocomplete="off"><input type="submit" value="Log in"></form>');
res.end();
});
router.post('/', bodyParser.urlencoded({ extended: false }), (req, res) => {
console.log('personal', req.body, req.personalNumber, res.body, req.headers);
res.send('personal', req.body, req.personalNumber, res.body, JSON.stringify(req.headers));
res.end();
});
module.exports = router;
server.js simplified
var express = require('express');
var app = express();
var login = require(__dirname + '/routes/login');
app.use('/login', login);
app.listen(80, () => {
console.log('Listening on port 80');
});
Going to /login, typing anything in the input and submitting (triggering a post to /login) will give use the following console output:
转到/登录,在输入中输入任何内容并提交(触发帖子到/ login)将使用以下控制台输出:
Listening on port 80
personal {} undefined undefined { host: 'localhost',
connection: 'keep-alive',
'content-length': '0',
pragma: 'no-cache',
'cache-control': 'no-cache',
origin: 'http://localhost',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
'content-type': 'application/x-www-form-urlencoded',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
referer: 'http://localhost/login',
'accept-encoding': 'gzip, deflate',
'accept-language': 'en-US,en;q=0.8,sv;q=0.6' }
Expected output would be for req.body to contain some information about the data from the form.
预期的输出将是req.body包含有关表单中数据的一些信息。
req.body = {
personalNumber: 'inputData'
};
2 个解决方案
#1
1
body-parser
works properly when it is added in your main file before all theroutes
body-parser在所有路由之前添加到主文件中时可以正常工作
So put the following code after creating the object of express
in server.js
file
因此,在server.js文件中创建express对象后,请输入以下代码
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
#2
0
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
router.urlencoded({ extended: false });
router.use(bodyParser.json());
router.get('/', (req, res) => {
res.send('<form method="POST" action="'+ req.originalUrl +'"><input type="text" id="username" autocomplete="off"><input type="submit" value="Log in"></form>');
res.end();
});
router.post('/', (req, res) => {
console.log('personal', req.body, req.personalNumber, res.body, req.headers);
res.send('personal', req.body, req.personalNumber, res.body, JSON.stringify(req.headers));
res.end();
});
module.exports = router;
Try this, It may work.
试试这个,它可能会奏效。
#1
1
body-parser
works properly when it is added in your main file before all theroutes
body-parser在所有路由之前添加到主文件中时可以正常工作
So put the following code after creating the object of express
in server.js
file
因此,在server.js文件中创建express对象后,请输入以下代码
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
#2
0
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
router.urlencoded({ extended: false });
router.use(bodyParser.json());
router.get('/', (req, res) => {
res.send('<form method="POST" action="'+ req.originalUrl +'"><input type="text" id="username" autocomplete="off"><input type="submit" value="Log in"></form>');
res.end();
});
router.post('/', (req, res) => {
console.log('personal', req.body, req.personalNumber, res.body, req.headers);
res.send('personal', req.body, req.personalNumber, res.body, JSON.stringify(req.headers));
res.end();
});
module.exports = router;
Try this, It may work.
试试这个,它可能会奏效。