web-dev-qa-db-fra.com

Pourquoi l'appel à node.js body-parser échoue malgré le fait que je l'ai installé?

Je commence à apprendre node.js et j'essaie de trouver comment obtenir le contenu d'une demande POST. J'essaie de suivre les instructions dans cet article . Jusqu'à présent, j'ai réussi à installer node.js (sur Windows 7) et express, et j'ai pu faire fonctionner mon tout premier script. Cependant, mon problème survient lorsque j'essaie d'utiliser l'analyseur de corps. Je l'ai installé et il apparaît être là (here is a screenshot)

Voici le code du script node.js

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(express.json());       // to support JSON-encoded bodies

app.get('/', function(req, res) {
    res.setHeader('Content-Type', 'text/plain');
    res.end('Vous êtes à l\'accueil');
});

app.get('/user/:usernum', function(req, res) {
    res.setHeader('Content-Type', 'text/plain');
    res.end('You are on page USER with n° : ' + req.params.usernum);
});

// https://stackoverflow.com/questions/5710358/how-to-get-post-a-query-in-express-js-node-js
app.post('/adonis', function(req, res) {
    res.setHeader('Content-Type', 'text/plain');
    console.log(req.body.title);
//    res.write(JSON.stringify(req));
    res.end('Hopefully I stringified a POST');
});

// ... Tout le code de gestion des routes (app.get) se trouve au-dessus

app.use(function(req, res, next){
    res.setHeader('Content-Type', 'text/plain');
    res.status(404).send('Page introuvable !');
});

app.listen(8091);

Pourtant, lorsque je l'exécute, node.js génère une erreur indiquant "impossible de trouver le module analyseur de corps". Qu'est ce que j'ai mal fait?

Selon les suggestions de @ Kale et d'autres, j'ai essayé d'installer localement l'analyseur de corps, mais cela ne semble pas aider car maintenant mon script donne le message suivant:

Error: Most middleware (like json) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.
at Function.Object.defineProperty.get (d:\smartguide\nodejs\node_modules\express\lib\express.js:99:13)
at Object.<anonymous> (d:\smartguide\nodejs\oc1.js:5:16)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3`

J'ai essayé d'installer "json" localement et globalement - l'installation semble fonctionner mais cela ne fait aucune différence avec l'erreur de fichier.

16
Martin K

Je pense que je faisais quelque chose de fondamentalement mauvais - je suis revenu à l'essentiel et j'ai tout recommencé, cette fois en m'assurant d'avoir un fichier package.json. Maintenant ça marche.

Voici le code:

var express = require('express');
var session = require('cookie-session');
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false });
var jsonParser = bodyParser.json();

var app = express();


// JSON testing
app.post('/json-test', jsonParser, function(req, res) {
    if (!req.body) return res.sendStatus(400);
    console.log(JSON.stringify(req.body));
    console.log(req.body.title);
    res.status(200).send(req.body.title);
    })

// Can't get anything else
.use(function(req, res, next){
    res.setHeader('Content-Type', 'text/plain');
    res.status(404).send('Page introuvable !');
    })


.listen(8090);

Et voici le package.json

{
"name": "todo1",
"version": "0.1.0",
"dependencies": {
    "express": "~4.11.0",
    "ejs": "~2.1.4",
    "cookie-session": "~1.1.0",
    "body-parser": "~1.10.1"
},
"author": "Martin",
"description": "Un gestionnaire de todolist ultra basique"
}
3
Martin K

Comme l'a indiqué Kevin B, vous devez installer body-parserlocalement et enregistrez-le dans le manifeste:

npm install --save body-parser
33
Taylor Swanson

Cette réponse est beaucoup plus simple. Accédez au répertoire de base et créez un lien vers les modules globaux requis.

npm link body-parser

Il n'est pas nécessaire d'installer des modules partout. Si le module n'est pas installé globalement, la commande ci-dessus installera le module globalement puis le liera localement.

7
Mel Lord-Lloyd

J'obtenais la même erreur où après l'installation express j'obtiens des erreurs comme

Cannot find module 'body-parser' après l'installation, l'erreur est

Cannot find module 'merge-descriptors' et ainsi de suite pour

Cannot find module 'finalhandler'

Cannot find module 'array-flatten'

Ces modules sont tous des dépendances pour express. Si vous exécutez "npm install" ou "npm install -g" sans aucun module, il installera toutes les dépendances manquantes.

Pour résoudre ce problème, je désinstalle d'abord l'express, puis j'installe le même et immédiatement après que "npm install" a été exécuté. Cela a corrigé toutes les erreurs.

0
Rahul Sonone