Node.js 错误:大多数中间件(如bodyParser)不再与Express捆绑

Node.js 错误:大多数中间件(如bodyParser)不再与Express捆绑,node.js,web-services,express,Node.js,Web Services,Express,我需要创建一个web服务,我正在服务器中使用Node.js。但当我在localhost中运行时,我得到一个错误: 错误:大多数中间件(如bodyParser)不再与Express捆绑,必须单独安装。请看 neo4jtest.js var config = require('./config'); var bodyParser = require('body-parser'); var app = express(); var neo4jurl = process.env.NEO4J_

我需要创建一个web服务,我正在服务器中使用Node.js。但当我在localhost中运行时,我得到一个错误:

错误:大多数中间件(如bodyParser)不再与Express捆绑,必须单独安装。请看

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);
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您需要通过npm单独安装主体解析器:

  • 在项目根目录中:

    npm安装主体解析器


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

    我遇到了类似的问题,但尚未解决

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

  • 更新您的package.json以包含所有中间件的依赖项,如:

    "dependencies": { "express": "*", "body-parser": "*", "method-override": "*", . . . } “依赖项”:{ “快递”:“*”, “正文分析器”:“*”, “方法重写”:“*”, . . . } 或者,您也可以在命令提示符下单独运行每一个

    npm install body-parser --save-dev npm安装主体解析器--保存开发 您必须对所示的短列表或完整列表中使用的中间件执行此操作

    据我所知,在您的代码中,您正在使用:主体解析器、方法重写、静态和errorhandler

  • 您必须删除该行:

    应用程序使用(应用程序路由器);如上所述


  • 正如我所说,我也在努力。我建议您进行更改,并告诉我控制台上的错误是否发生了更改。

    编辑:我发布了一篇Brian's seed的文章,其中包含以下所有更改:

    我是在与此进行斗争时发现此讨论的。我正在更新我的
    在我开始一个新的项目之前,我计划在我弄清楚如何做的时候把我的更改提交给布赖恩·福特

    旧的package.json

        "socket.io": "~0.9.16",
        "jade": "~0.31.2",
        "express": "~3.2.6"
    
        "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.*"
    
    NEW package.json

        "socket.io": "~0.9.16",
        "jade": "~0.31.2",
        "express": "~3.2.6"
    
        "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')));
    
    新设置代码:

        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中搜索app.listen,有一条很好的注释解释了问题。我不知道为什么我在查找源代码时这么慢,尽管看起来并不是只有我一个人这么做

    演示、文档和大多数博客帖子都说,你用这个启动你的应用程序,它可以工作,但会阻止我们使用socket.io(同时使用http和https)

    这在功能上是相同的,但使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'));
        });
    
    不管您使用的是新的express“standard”语法还是这种语法,无论哪种方式都使用相同的http对象,我记得http是node.js的内置组件

    我希望这对其他人有帮助。

    • 首先安装bodyParser:

      npm安装主体解析器

    • 并使用它:

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

    我已经安装了body parserbluedev的依赖项:我已经检查了这两个站点。谢谢!!!先生,如何替换旧的捆绑中间件??您能告诉我步骤吗?如果您想更新包。json:npm安装body parser--保存