错误:大多数中间件(如bodyParser)不再与Express捆绑在一起

我需要创build一个Web服务,我在服务器中使用Node.js。 但是,当我在本地主机运行,我收到一个错误:

错误:大多数中间件(如bodyParser)不再与Express捆绑在一起,必须单独安装。 请参阅https://github.com/senchalabs/connect#middleware。

neo4jtest.js

var config = require('./config'); var bodyParser = require('body-parser'); var app = express(); var neo4jurl = process.env.NEO4J_URL ; neo4jurl = neo4jurl +'/db/data/'; var query = [ 'START me=node:node_auto_index(name={inputusername}) MATCH me<--friend<--friend_of_friend where (friend_of_friend.entitytype={inputentitytype}) RETURN friend_of_friend;' ]; var insertquery = [ 'CREATE (user {entitytype:{inputentitytype}, name : {inputname}}) return user;' ]; var queryforallrelation = [ 'start n = node:node_auto_index(name={inputusername}) match(n)--(x) return x;']; // Config var env = process.env.NODE_ENV || 'development'; if ('development' == env) { // configure stuff here app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(application_root, "public"))); app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); } app.get('/api', function (req, res) { res.send('REST API is running'); }); app.get('/friendoffriend/:username', function (req, res){ res.set({'Content-Type': 'text/json'}); username = req.params.username; type = 'user'; neo4j.connect(neo4jurl, function (err, graph) { graph.query(query.join('\n'), {inputusername : username, inputentitytype :type} ,function (err, results) { if (err) { res.send(HTTPStatus.INTERNAL_SERVER_ERROR,'Internal Server Error'); } else { res.send(HTTPStatus.OK,JSON.stringify(results)); } }); }); }); app.get('/insertuser/:username', function (req, res){ res.set({'Content-Type': 'text/json'}); username = req.params.username; type = 'user'; neo4j.connect(neo4jurl, function (err, graph) { graph.query(insertquery.join('\n'), {inputname : username, inputentitytype :type} ,function (err, results) { if (err) { res.send(HTTPStatus.INTERNAL_SERVER_ERROR,'Internal Server Error'); } else { res.send(HTTPStatus.OK,JSON.stringify(results)); } }); }); }); //Cypher Query with Javascript Callback Example function neo4jQuery(neo4jurl, query, parameters, giveresults) { neo4j.connect(neo4jurl, function (err, graph) { graph.query(query.join('\n'), {inputusername : 'andrew'} ,function (err, results) { if (err) { giveresults(HTTPStatus.INTERNAL_SERVER_ERROR); } else { giveresults(JSON.stringify(results)); } }); }); } app.get('/allrelations/:username', function (req, res){ res.set({'Content-Type': 'text/json'}); username = req.params.username; parameters = {inputusername : username}; neo4jQuery(neo4jurl, queryforallrelation, parameters, function(results){ res.send(results); }); }); app.listen(1212); 

以下是我从控制台得到的错误:

 C:\ node \ NodejsNeo4j1-master>节点neo4jtest.js

错误:大多数中间件(如bodyParser)不再与Express捆绑在一起,必须单独安装。 请参阅https://github.com/senchalabs/connect#middleware。
    在Function.Object.defineProperty.get(C:\ node \ NodejsNeo4j1-master \ node_modules \ express \ lib \ express.js:89:13)
    在对象。<anonymous>(C:\ node \ NodejsNeo4j1-master \ neo4jtest.js:26:18)
    在Module._compile(module.js:456:26)
    在Object.Module._extensions..js(module.js:474:10)
    在Module.load(module.js:356:32)
    在Function.Module._load(module.js:312:12)
    在Function.Module.runMain(module.js:497:10)
    在启动(node.js:119:16)
    在node.js:906:3

您需要用外部/独立中间件来replace旧的捆绑中间件用法( express.bodyParserexpress.methodOverrideexpress.errorHandler )。 错误中的链接提供了这些新的中间件的名称。 您可能需要检查这些中间件的文档,以检查自Express 3以来的任何API更改。

编辑:我已经发布了一个布赖恩的种子与下面给出的所有变化叉: https : //github.com/LossyHorizo​​n/angular-socket-io-seed

我发现这个讨论,同时与我的自我斗争。 我正在更新我的副本
https://github.com/btford/angular-socket-io-seed在我开始一个新的项目之前&#x3002; 当我计算出来的时候,我打算把自己的变化提交给Brian Ford。

旧的package.json

  "socket.io": "~0.9.16", "jade": "~0.31.2", "express": "~3.2.6" 

新的package.json

  "socket.io": "1.1.*", "jade": "1.6.*", "express": "4.8.*", "serve-favicon": "2", "morgan": "1.3.*", "method-override":"*", //added missing , "body-parser": "1.8", "errorhandler": "*", "express-session": "*", "multer": "0.1.*" 

您将需要明确地添加以前只存在的中间件,一行:

  var express = require('express'); 

成为一堆线:

  var express = require('express'); var favicon = require('serve-favicon'); var logger = require('morgan'); var methodOverride = require('method-override'); var session = require('express-session'); var bodyParser = require('body-parser'); var multer = require('multer'); var errorHandler = require('errorhandler'); 

旧设置代码:

  app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.static(path.join(__dirname, 'public'))); app.use(app.router); 

新的设置代码:

  app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(favicon(__dirname + '/public/favicon.ico')); app.use(logger('dev')); app.use(methodOverride()); app.use(session({ resave: true, saveUninitialized: true, secret: 'uwotm8' })); // parse application/json app.use(bodyParser.json()); // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: true })); // parse multipart/form-data app.use(multer()); app.use(express.static(path.join(__dirname, 'public'))); 

这是永远带走我的部分。 可悲的是,一旦我解决了这个问题,我查看了express / lib / application.js,search了app.listen,并且有一个非常好的解释。 不知道为什么我慢慢查找源代码,虽然看起来我并不孤单。

演示,文档,大多数博客文章都说,你用这个开始你的应用程序,它可以工作,但locking我们同时使用socket.io(HTTP和HTTPS)。

  app.listen(app.get('port'), function(){ console.log('Express server on port ' + app.get('port')); }); 

这在function上是一样的,但是使得socket.io的使用变得容易。 查看app.listen()的源代码,你会发现这就是它正在做的事情。

  // could be/remain at top of file var http = require('http'); var server = http.createServer (app); // delete this line if NOT using socket.io var io = require('socket.io').listen(server); server.listen(app.get('port'), function(){ console.log('Express server on port ' + app.get('port')); }); 

我不关心,如果你使用新的快速“标准”语法,或者这个语法,同样的http对象被使用,而且我记得http是一个内置的node.js组件。

我希望这可以帮助别人。

您需要通过npm分别安装bodyparsing器:

  1. 在你的项目根目录下:

    npm install body-parser

看到

https://www.npmjs.org/package/body-parser

https://github.com/strongloop/express/wiki/Migrating-from-3.x-to-4.x

  • 首先你安装bodyParser:

    npm install body-parser

  • 并使用它:

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

我有一个类似的问题,还没有能够解决它呢。

但根据我的阅读,从各种来源你需要:

  1. 要么更新你的package.json来包含所有中间件的依赖关系,比如:

      “依赖”:{
                        “performance”: ”*”,
                        “body-parser”:“*”,
                        “method-override”:“*”,
                       。
                       。
                       。  
                     } 

    或者您可以直接在命令提示符下单独运行每一个

      npm安装body-parser --save-dev 

    您将不得不为此处显示的短列表中使用的中间件或此处的完整列表执行此操作 。

    据我所知,在你的代码中,你正在使用:body-parser,方法覆盖,静态和error handling程序。

  2. 您将不得不删除该行:

      app.use(app.router); 

    如此处所述

正如我所说,我也在努力。 我build议你进行更改,并告诉我如果控制台上的错误更改。