2014-08-28 48 views
33

ile paketlenmemiştir Bir web servisi oluşturmam gerekiyor ve sunucuda Node.js kullanıyorum.Hata: Çoğu middleware (bodyParser gibi) artık Express

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

Error: Most middleware (like bodyParser) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware. 
    at Function.Object.defineProperty.get (C:\node\NodejsNeo4j1-master\node_modules\express\lib\express.js:89: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) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:906:3 
i konsoldan got hata

Error: Most middleware (like bodyParser) is no longer bundled with Express and must be installed separately. Please see 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); 

ardından edilmektedir: Ben localhost içinde çalıştırıyorum Ama ne zaman bir hata alıyorum

cevap

5

Bkz Harici/ayrı ara katman yazılımı ile birlikte kullanım (express.bodyParser, express.methodOverride, express.errorHandler). Hatadaki bağlantı size bu yeni katman yazılımın isimlerini verir. Express 3.

+5

Teşekkürler !!! Efendim, eski paketlenmiş middleware nasıl değiştirilir ?? Lütfen bana adımları söyler misiniz? –

1

Benzer sorunlarım var ve henüz çözemedim, herhangi bir API değişikliği olup olmadığını denetlemek için bu middleware belgelerini denetlemek isteyebilirsiniz.

Ama

benim okuma gereği, çeşitli kaynaklardan yapmanız gerekir:

  1. Ya gibi tüm katman için bağımlılıkları içerecek şekilde package.json güncelleyin:

     "dependencies": { 
            "express": "*", 
            "body-parser": "*", 
            "method-override": "*", 
            . 
            . 
            . 
           }

    veya yapabilirsiniz her birini ayrı ayrı komut isteminde çalıştırın. here ya da tam liste here gösterilen kısa listeden kullandığınız ara katman yazılımı.

    Yapabileceğim kadarıyla, kodunuzda: body-parser, method-override, static ve errorhandler.

  2. Çizgiyi kaldırmak zorunda kalacak: Dediğim gibi here

açıklanan Üzerinde çalışıyorum, ayrıca olduğum gibi

 app.use(app.router);
. Değişiklikleri yapmanızı öneririm ve konsoldaki hatanın değişip değişmediğini söylerim.

49

DÜZENLEME: Aşağıda verilen tüm değişikliklerle Brian'ın tohumun bir çatal attılar: Bu benim kendi savaşırken https://github.com/LossyHorizon/angular-socket-io-seed

Bu tartışmayı buldum. Yeni bir projeye başlamadan önce
https://github.com/btford/angular-socket-io-seed kopyasını güncelleştiriyorum. Değişikliklerimi anladığım zaman Brian Ford'a geri göndermeyi planlıyorum.

ESKİ package.json

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

YENİ 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.*" 
Açıkça, bir satır sadece mevcut olarak kullanılan orta tesisat eklemeniz gerekecektir

:

var express = require('express'); 

Çizgiler bir demet olur:

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'); 

ESKİ kurulum kodu:

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); 

YENİ kurulum kodu:

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'))); 

Bu sonsuza götürdü parçasıdır. Ne yazık ki bunu bir kez denedim, express/lib/application.js dosyasına baktım, app.listen'i aradım ve işlerin gayet güzel bir şekilde açıklandığı harika bir yorum var. Kaynağa bakmak için neden bu kadar yavaş olduğumu bilmiyorum, bunun içinde yalnız değilim gibi görünüyor.

Demolar, dokümanlar, blog gönderilerinin çoğu, uygulamanızı bununla başlattığınızı ve işe yaramadığını ancak socket.io'yu kullanmamızı engeller (http: // & https).

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

Bu işlev aynıdır ancak socket.io kullanımını kolaylaştırır. App.listen() için kaynağa bakın ve bunun zaten ne yaptığını göreceksiniz.

// 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')); 
    }); 

Ben yeni, aynı http nesne kullanılır her iki şekilde 'standart' sözdizimi veya bu sözdizimi ifade kullanırsanız fark etmez, ben bileşeninde bir inşa edilmiştir http hatırladığım kadarıyla zaten node.js için .

Umarım bu başka birine yardımcı olur. Bunu

npm install body-parser

  • Ve kullanın:

  • +0

    Doğru cevap bu olmamalı mıydı? –

    4
    • Önce bodyParser yüklemek

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