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à
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.
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"
}
Comme l'a indiqué Kevin B, vous devez installer body-parser
localement et enregistrez-le dans le manifeste:
npm install --save body-parser
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.
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.