如何摆脱Connect 3.0弃用警报?


74

我是一个使用express.js创建Web应用程序的node.js开发人员。现在,我的问题是:

每当我在计算机上创建一个应用程序时,npm都会安装其内容并运行它(使用node app.js和nodemon),我会在控制台中收到以下消息:

connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0
Express server listening on port 3000

该应用程序可以正常工作。但是,当我克隆在其他计算机上创建的应用程序时,没有收到该消息,因此我想我的计算机中有些东西已经过时了。

我去了消息中提到的站点,并确认了我的猜测。那是弃用警告。但是,我已经更新了node和npm并进行了全局表达,但是我仍然得到注释。

因此,我的问题是:我不知道我需要更新什么以摆脱弃用票据,因为它们使我感到惊讶。

我希望有一个人可以帮助我。非常感谢。


您是否尝试过直接使用其他库?例如多方会议(表示幕后用途?)-帖子底部的andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html上有一个不错的清单。
Guy Mograbi

Answers:


170

这是一条警告,一旦Express更新为使用Connect 3.0就会消失-作为临时修复,请遵循https://github.com/senchalabs/connect/wiki/Connect-3.0顶部的说明。具体来说,在您的应用中找到以下行:

app.use(express.bodyParser());

并将其替换为以下内容(这bodyParser将是3.0中的内容):

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

1
有关Connect 3.0问题的更多信息,请点击:groups.google.com/d/msg/express-js/iP2VyhkypHo/5AXQiYN3RPcJ
fernandopasik

16
我还需要添加,app.use(express.multipart())因为我的多部分表单停止了工作(当然),这也带来了弃用警告(当然)。
的付费书呆子

5
使用Wiki中列出的多部分解析器之一。不要使用connect / express”
Jonathan Ong 2013年

1
谢谢!您!我快要疯了
Marcus Hammarberg 2014年

60

我负责此弃用通知。你读过维基吗?https://github.com/senchalabs/connect/wiki/Connect-3.0

步骤1:直接使用每个解析器,而不是 app.use(express.bodyParser());

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

步骤2:使用不同的multipart解析器,例如:可以使用connect-multiparty

app.use(require('connect-multiparty')())

连接3和快速4的工作尚未开始,因为节点0.12需要一段时间才能释放。目前没有任何更新。


1
这不是弃用通知,而是一项重大更改。app.use(express.bodyParser)不适用于最新版本,但库的主要版本号未更改,这打破了semver的概念。
tkone 2013年

从运行最新版本npm install express,并执行一个非常简单的操作:var express = require('express'), app = express(); app.use(express.bodyParser); app.get('/', function(req,res){ res.send(200, 'ok');}); app.listen(3000);。发出http://localhost:3000/挂起curl和浏览器并打印警告的请求。删除app.use(express.bodyParser)或切换到app.use(express.json())原因,应用返回“OK” HTTP状态200
tkone

它是连接多方的,而不是连接多方的
Vince Yuan

1
我希望可以选择禁止这种警告;尽管弃用通知很重要,但在企业环境中很少有没有禁止使用这些通知的选项。我目前的状况使我无法进行必要的更改,至少有6个月没有收到该消息,但是我可以使用配置选项,但是现在我们在日志中散布的格式与其他格式不同,这使得我们较旧的日志解析器不太满意。只是值得深思的;弃用通知很重要,但是开发人员需要一种方法来在必要时将其删除。
克里斯(Kris)2014年

1
@Kris如果您不能直接使用json和urlencoded中间件(大概是因为您正在使用多部分支持来处理文件上载),则可以console.log在bodyParser实例化时暂时重写,然后将其恢复。我在Sails中使用了一段时间,以标准化我们的日志输出
mikermcneil 2014年

1

由于express只是连接的包装,我建议直接使用connect。

所以代替: app.use(express.bodyParser());

采用:

connect = require('connect');
app.use(connect.json());
app.use(connect.urlencoded());
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.