首页 文章

bodyParser已弃用快递4

提问于
浏览
342

我正在使用快递4.0,我知道身体解析器已被取出快递核心,我使用推荐的替代品,但我得到了

body-parser deprecated bodyParser: use individual json/urlencoded middlewares server.js:15:12 body-parser deprecated urlencoded: explicitly specify "extended: true" for extended parsing node_modules/body-parser/index.js:74:29

我在哪里可以找到这个假设的中间件?或者我不应该得到这个错误?

var express     = require('express');
var server      = express();
var bodyParser  = require('body-parser');
var mongoose    = require('mongoose');
var passport    = require('./config/passport');
var routes      = require('./routes');

mongoose.connect('mongodb://localhost/myapp', function(err) {
    if(err) throw err;
});

server.set('view engine', 'jade');
server.set('views', __dirname + '/views');

server.use(bodyParser()); 
server.use(passport.initialize());

// Application Level Routes
routes(server, passport);

server.use(express.static(__dirname + '/public'));

server.listen(3000);

8 回答

  • 0

    app.use(bodyParser.urlencoded({extended: true}));

    我有同样的问题,但这对我有用 . 您可以尝试这个扩展部分 .

  • 147

    我发现在添加时

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({
      extended: true
    }));
    

    帮助,有时这是你的查询的问题,决定了如何处理它 .

    例如,可能是您的参数在 URL 而不是在正文中传递

    在这种情况下,您需要同时捕获 bodyurl 参数并使用可用的参数(在下面的情况下优先选择body参数)

    app.route('/echo')
        .all((req,res)=>{
            let pars = (Object.keys(req.body).length > 0)?req.body:req.query;
            res.send(pars);
        });
    
  • 619

    let me clarify why we use body parser?

    Node.js正文解析中间件 . 在处理程序之前在中间件中解析传入的请求主体,在req.body属性下可用 . 注意由于req.body的形状基于用户控制的输入,因此该对象中的所有属性和值都是不可信的,应在信任之前进行验证 . 例如,req.body.foo.toString()可能以多种方式失败,例如foo属性可能不存在或者可能不是字符串,toString可能不是函数,而是字符串或其他用户输入 .

    安装(项目文件夹的位置)

    npm install body-parsernpm i body-parser

    现在将它添加到您在package.json中定义的主js文件或文件中

    var express = require('express')
    var bodyParser = require('body-parser')
    
    var app = express()
    
       // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: false }))
    
    // parse application/json
    app.use(bodyParser.json())
    

    如需更多说明,请浏览https://www.npmjs.com/package/body-parser

  • 1

    body-parser是一段快速中间件,它读取表单的输入并将其存储为可通过req.body访问的javascript对象 . 必须安装body-parser'(通过npm install --save body-parser)有关详细信息,请参阅:https://github.com/expressjs/body-parser

    var bodyParser = require('body-parser');
       app.use(bodyParser.json()); // support json encoded bodies
       app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
    

    extended 设置为true时,放气(压缩)的物体将膨胀;当 extended 设置为false时,放气体被拒绝 .

  • 10

    您对使用快速生成器有什么看法,它会生成骨架项目, without deprecated messages 出现在您的日志中

    运行此命令

    npm install express-generator -g
    

    现在,通过在 your Node projects folder 中键入此命令来创建新的Express.js启动应用程序 .

    express node-express-app
    

    该命令告诉express生成名为 node-express-app 的新Node.js应用程序 .

    然后 Go to the newly created project directoryinstall npm packagesstart the app 使用该命令

    cd node-express-app && npm install && npm start
    
  • 1

    这意味着使用 bodyParser() constructor 已经deprecated,截至2014-06-19 .

    app.use(bodyParser()); //Now deprecated
    

    您现在需要单独调用这些方法

    app.use(bodyParser.urlencoded());
    
    app.use(bodyParser.json());
    

    等等 .

    如果您仍然收到 urlencoded 的警告,则需要使用

    app.use(bodyParser.urlencoded({
      extended: true
    }));
    

    现在需要显式传递 extended 配置对象键,因为它现在没有默认值 .

    如果您使用Express> = 4.16.0,则已在方法 express.json()express.urlencoded() 下重新添加了主体解析器 .

  • 5

    zero warnings ?像这样用它:

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({
      extended: true
    }));
    

    Explanation :不推荐使用 extended 选项的默认值,这意味着您需要显式传递true或false值 .

  • -1

    在旧版本的express中,我们不得不使用:

    app.use(express.bodyparser());
    

    因为body-parser是node和express之间的中间件 . 现在我们必须使用它:

    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(bodyParser.json());
    

相关问题