Erreur: la plupart des logiciels intermédiaires (comme bodyParser) ne sont plus fournis avec Express

Je dois créer un service Web et utiliser Node.js sur le serveur. Mais quand je cours sous localhost, je reçois une erreur:

Erreur: la plupart des logiciels intermédiaires (tels que bodyParser) ne sont plus fournis avec Express et doivent être installés séparément. S’il vous plaît voir 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); 

Voici l’erreur que j’ai reçue de la console:

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

 Erreur: la plupart des logiciels intermédiaires (tels que bodyParser) ne sont plus fournis avec Express et doivent être installés séparément.  S'il vous plaît voir 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.  (C: \ node \ NodejsNeo4j1-master \ neo4jtest.js: 26: 18)
     at Module._comstack (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)
     au démarrage (node.js: 119: 16)
     at node.js: 906: 3

Vous devez remplacer votre ancienne utilisation de middleware groupé ( express.bodyParser , express.methodOverride , express.errorHandler ) par un middleware externe / distinct. Le lien dans l’erreur vous donne les noms de ces nouveaux middlewares. Vous souhaiterez peut-être consulter la documentation de ces logiciels intermédiaires pour vérifier les modifications apscopes à l’API depuis Express 3.

EDIT: J’ai posté un fork de Brian avec tous les changements donnés ci-dessous: https://github.com/LossyHorizon/angular-socket-io-seed

J’ai trouvé cette discussion en luttant contre cela moi-même. Je mets à jour ma copie de
https://github.com/btford/angular-socket-io-seed avant de commencer un nouveau projet. Je compte renvoyer mes modifications à Brian Ford quand je comprendrai comment.

OLD package.json

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

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

Vous devrez explicitement append le middleware qui était juste présent, une ligne:

  var express = require('express'); 

Devient un tas de lignes:

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

Ancien code de configuration:

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

NOUVEAU code de configuration:

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

C’est la partie qui m’a pris pour toujours. Malheureusement, une fois que j’ai travaillé cela, j’ai regardé dans express / lib / application.js, recherché app.listen et il y a un commentaire merveilleux qui explique les choses très bien. Je ne sais pas pourquoi j’étais si lent à chercher la source, même si je ne suis pas le seul à le faire.

Les démos, les documents, la plupart des articles de blog, disent que vous démarrez votre application avec ceci, et que cela fonctionne, mais nous empêche d’utiliser socket.io (http & https en même temps).

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

C’est fonctionnellement la même chose, mais rend l’utilisation de socket.io facile. Recherchez la source pour app.listen () et vous verrez que c’est ce qu’elle fait de toute façon.

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

Peu importe que vous utilisiez la nouvelle syntaxe “standard” express, ou cette syntaxe, le même object http est utilisé dans les deux cas et, si je me souviens bien, http est un composant intégré à node.js de toute façon.

J’espère que ça aidera quelqu’un d’autre.

  • D’abord, vous installez bodyParser:

    npm install body-parser

  • Et l’utiliser:

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

Vous devez installer l’parsingur de corps séparément via npm:

  1. Dans votre racine de projet:

    npm install body-parser

Voir

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

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

J’ai un problème similaire et je n’ai pas encore réussi à le résoudre.

Mais selon mes lectures, de diverses sources, vous devez:

  1. Soit vous mettez à jour votre package.json pour inclure les dépendances pour tous les middlewares comme:

      "dépendances": {
                        "Express": "*",
                        "body-parser": "*",
                        "method-override": "*",
                       .
                       .
                       .  
                     } 

    ou vous pouvez simplement exécuter chacun séparément sur l’invite de commande comme

      npm install body-parser --save-dev 

    Vous devrez le faire pour le middleware que vous utilisez à partir de la liste courte affichée ici ou de la liste complète ici .

    Autant que je puisse le comprendre, dans votre code, vous utilisez: body-parser, method-override, static et errorhandler.

  2. Vous devrez supprimer la ligne:

      app.use (app.router); 

    comme décrit ici

Comme je l’ai dit, j’y travaille aussi. Je vous suggère d’apporter les modifications et de me dire si l’erreur sur la console change.