web-dev-qa-db-ja.com

エラー:ほとんどのミドルウェア(bodyParserなど)はExpressにバンドルされなくなりました

Webサービスを作成する必要があり、サーバーでNode.jsを使用しています。しかし、localhostで実行しているときにエラーが発生します:

エラー:ほとんどのミドルウェア(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> node neo4jtest.js 
 
エラー:ほとんどのミドルウェア(bodyParserなど)はExpressにバンドルされていないため、個別にインストールする必要があります。 Function.Object.defineProperty.get(C:\ node\NodejsNeo4j1-master\node_modules\express\lib\express.js:89でhttps://github.com/senchalabs/connect#middleware.
を参照してください。 :13)
 at Object。<anonymous>(C:\ node\NodejsNeo4j1-master\neo4jtest.js:26:18)
 at Module._compile(module.js:456:26) 
 at Object.Module._extensions..js(module.js:474:10)
 at Module.load(module.js:356:32)
 at Function.Module ._load(module.js:312:12)
 Function.Module.runMain(module.js:497:10)
 at startup(node.js:119:16)
 node.js:906:3 
44
user3936984

バンドルされている古いミドルウェアの使用法(express.bodyParserexpress.methodOverrideexpress.errorHandler)外部/別個のミドルウェアを使用。エラー内のリンクは、これらの新しいミドルウェアの名前を提供します。 Express 3以降のAPIの変更を確認するには、これらのミドルウェアのドキュメントを確認してください。

6
mscdex

編集:私はブライアンのシードのフォークを投稿し、以下に示すすべての変更を加えました。 https://github.com/LossyHorizo​​n/angular-socket-io-seed

私はこれを自分自身と戦っている間にこの議論を見つけました。のコピーを更新しています
https://github.com/btford/angular-socket-io-seed 新しいプロジェクトを始める前。方法がわかったら、変更をBrian Fordに送信する予定です。

OLD 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.*"

存在していたミドルウェアを明示的に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を調べ、app.listenを検索しました。物事を非常にうまく説明するすばらしいコメントがあります。なぜソースを調べるのがとても遅かったのかはわかりませんが、その中で私は一人ではないようです。

デモ、ドキュメント、ほとんどのブログ投稿では、これでアプリを起動すると言っていますが、それは機能しますが、socket.ioの使用を禁止しています(httpとhttpsも同時に)。

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

これは機能的には同じですが、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の組み込みコンポーネントです。

これが他の人の助けになることを願っています。

57
James Powell
  • 最初にbodyParserをインストールします:

    npm install body-parser

  • そしてそれを使用します:

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

Npmを介してボディパーサーを個別にインストールする必要があります。

  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

4
user3069333

私は同様の問題を抱えていますが、まだ解決できていません。

しかし、私の読書によると、さまざまなソースから次のことが必要です。

  1. Package.jsonを更新して、次のようなすべてのミドルウェアの依存関係を含めます。

     「依存関係」:{
     "express": "*"、
     "body-parser": "*"、
     "method-override": "*"、
    。
    。
    。 
    } 

    または、コマンドプロンプトでそれぞれを個別に実行することができます

    npm install body-parser --save-dev

    here または完全なリスト here の短いリストから使用するミドルウェアに対してこれを行う必要があります。

    私の知る限り、あなたのコードでは、body-parser、method-override、static、errorhandlerを使用しています。

  2. 次の行を削除する必要があります。

     app.use(app.router); 
    説明通り こちら

私が言ったように、私もそれに取り組んでいます。変更することをお勧めします。コンソールのエラーが変更されたかどうかを教えてください。

1
Chintan Pathak