我正在阅读Node和Express的Web开发这本书,遇到了一个障碍。
我被指示将下面的内容放在我的应用程序文件中,但它看起来像是body parser
已被弃用,无法工作。如何实现相同的功能?
这是我当前的代码:
app.use(require('body-parser')());
app.get('/newsletter', function(req, res){
// we will learn about CSRF later...for now, we just
// provide a dummy value
res.render('newsletter', { csrf: 'CSRF token goes here' });
});
app.post('/process', function(req, res){
console.log('Form (from querystring): ' + req.query.form);
console.log('CSRF token (from hidden form field): ' + req.body._csrf);
console.log('Name (from visible form field): ' + req.body.name);
console.log('Email (from visible form field): ' + req.body.email); res.redirect(303, '/thank-you');
});
只是想更新这个线程,因为我尝试了上面的解决方案,并收到未定义。Express 4.16已经实现了他们自己版本的body解析器,因此您不需要将依赖项添加到您的项目中。你可以在快车上运行它
app.use(express.json()); // Used to parse JSON bodies
app.use(express.urlencoded()); // Parse URL-encoded bodies using query-string library
// or
app.use(express.urlencoded({ extended: true })); // Parse URL-encoded bodies using qs library
来源
查询字符串vs qs
发件人:bodyParser已弃用express 4
这意味着从2014年6月19日起,使用bodyParser()构造函数已被弃用。
app.use(bodyParser()); //Now deprecated
现在需要分别调用这些方法
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded());
app.use(bodyParser.json());
等等。
不要再使用主体解析器了
自Express 4.16以来,主体解析功能已内置于Express中
所以,你可以简单地做
app.use(express.urlencoded({extended: true}));
app.use(express.json()) // To parse the incoming requests with JSON payloads
从直接表达,而不必安装身体解析器。
您现在可以使用npm uninstall body parser
要获取POST数据内容,可以使用req。正文
app.post("/yourpath", (req, res)=>{
var postData = req.body;
//Or if body comes as string,
var postData = JSON.parse(req.body);
});