2015-08-05 4 views
13

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

Вот код 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); 

Но когда я запускаю его, node.js выдает ошибку о том, «не может найти модуль тела -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“ локально и по всему миру - установка работает, но это не имеет никакого отношения к ошибке файла.

+1

Как вы установили тело-парсер? было ли это 'npm install --save body-parser'? – Sosdoc

+3

Вероятно, потому что вы установили его глобально вместо локально. –

ответ

3

Я думаю, что я делаю что-то принципиально неправильно - я вернулся к основам и начал все заново , на этот раз убедившись, что у меня есть файл 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" 
} 
26

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

npm install --save body-parser 
+0

Установив body-parser локально (в соответствии с @Kale), теперь я получаю следующую ошибку: –

+0

Это распространенная ошибка при развертывании узла с heroku, и это происходит, когда вы не добавляете body-parser в 'package.json' зависимостей в корневой папке вашего приложения «Зависимости»: {«body-parser»: «^ 1.17.2», ... ' –

5

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

npm link body-parser 

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

+0

Удивительно, что он работает, не переустанавливая его. _/\ _ – HydTechie