为何已弃用的body-parser会导致Express应用崩溃?
为什么弃用的body-parser无法正常工作?
你的问题不是因为body-parser被弃用导致崩溃,而是调用方式写错了。
看你用body-parser的代码里这一行:
app.use(bodyParser, urlencoded({ extended: true }));
这是错误的写法。app.use()需要接收中间件函数作为参数,而你直接传了bodyParser模块本身,外加一个配置对象,这不符合Express的中间件使用规则,所以导致应用崩溃。
正确的body-parser使用方式应该是调用它的urlencoded方法生成中间件:
app.use(bodyParser.urlencoded({ extended: true }));
哪怕body-parser已经被Express内置(从Express 4.16.0开始,express.urlencoded和express.json就是body-parser的内置版本),但如果你单独安装了body-parser包,只要写法正确,它依然能正常工作。
你注释掉body-parser后改用express.urlencoded({ extended: true })能正常运行,是因为这种写法是正确的——直接调用Express内置的对应方法生成中间件,符合app.use()的参数要求。
总结:崩溃和body-parser是否弃用无关,纯粹是调用语法错误。修正写法后,单独的body-parser包依然可以正常使用(虽然更推荐用Express内置的版本)。
内容的提问来源于stack exchange,提问作者Tricia D
相关产品推荐
相关产品推荐

