Подтвердить что ты не робот

Почему вызов node.js body-parser выходит из строя, несмотря на то, что я его установил?

Я начинаю изучать node.js и пытаюсь понять, как получить содержимое запроса POST. Я пытаюсь следовать инструкциям в этом посте. До сих пор я успешно установил node.js (в Windows 7) и Express и смог заставить работать мой самый первый скрипт. Однако моя проблема возникает, когда я пытаюсь использовать body-parser. Я установил его, и он, кажется, там (here is a screenshot)

Вот код скрипта 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);
});

// /info/13859/how-to-retrieve-post-query-parameters
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);

Тем не менее, когда я запускаю его, node.js выдает ошибку, говорящую "не могу найти модуль body-parser". Что я сделал не так?

В соответствии с предложениями @Kale и других, я попытался установить body-parser локально, но, похоже, это не помогло, так как теперь мой скрипт выдает следующее сообщение:

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'

Я попытался установить "json" локально и глобально - установка, кажется, работает, но это не имеет никакого значения к ошибке файла.

4b9b3361

Ответ 1

Я думаю, что я делал что-то принципиально неправильное - я вернулся к основам и начал все заново, на этот раз убедившись, что у меня есть файл package.json. Теперь он работает.

Вот код:

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

И вот 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"
}

Ответ 2

Как сказал Кевин Б., вам нужно установить body-parser локально и сохранить его в манифесте:

npm install --save body-parser

Ответ 3

Этот ответ намного проще. Перейдите в базовый каталог и укажите необходимые глобальные модули.

npm link body-parser

Нет необходимости устанавливать модули повсюду. Если модуль не установлен глобально, указанная выше команда будет устанавливать модуль глобально, а затем локально связываться с ним.

Ответ 4

Я получаю ту же ошибку, когда после установки Express я получаю такие ошибки, как

Cannot find module 'body-parser' после установки этого ошибка

Cannot find module 'merge-descriptors' и т.д. Для

Cannot find module 'finalhandler'

Cannot find module 'array-flatten'

Все эти модули являются зависимостями для экспресс. Если вы выполните "npm install" или "npm install -g" без какого-либо модуля, он установит все отсутствующие зависимости.

Чтобы это исправить, я сначала удаляю Express, а затем устанавливаю его и сразу после этого выполняю "npm install". Это исправило все ошибки.