2015-08-05 8 views
13

Zaczynam uczyć się node.js i próbuję dowiedzieć się, jak uzyskać zawartość żądania POST. Próbuję postępować zgodnie z instrukcjami in this post. Do tej pory pomyślnie zainstalowałem plik node.js (w systemie Windows 7) i przesyłam go ekspresowo i udało mi się uruchomić mój pierwszy skrypt. Jednak mój problem pojawia się, gdy próbuję użyć parsera ciała. Zainstalowałem go i wydaje się być tam (here is a screenshot)Dlaczego wywołanie modułu body-parser node.js kończy się niepowodzeniem, mimo że go zainstalowałem?

Oto kod node.js skryptu

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

Jednak kiedy go uruchomić, node.js zgłasza błąd mówiąc „nie można znaleźć korpus modułu -parser ". Co zrobiłem źle?

Zgodnie @ Kale i sugestie cudzych Próbowałem instalacji ciało-parser lokalnie, ale nie wydaje się, aby pomóc, ponieważ teraz mój skrypt daje następujący komunikat:

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` 

Próbowałem instalowanie «json» lokalnie i globalnie - instalacja wydaje się działać, ale nie ma znaczenia dla błędu pliku.

+1

Jak zainstalowałeś moduł analizatora treści? czy było to 'npm install --save body-parser'? – Sosdoc

+3

Prawdopodobnie ponieważ zainstalowałeś go globalnie zamiast lokalnie. –

Odpowiedz

3

myślę, że robię coś fundamentalnie złego - Wróciłem do korzeni i zaczął wszystko od nowa , tym razem upewniając się, że mam plik package.json. Teraz działa.

Oto kod:

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

A oto 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

Jak stwierdził Kevin B, trzeba zainstalować body-parserlokalnie i zapisać go w manifeście:

npm install --save body-parser 
+0

Po zainstalowaniu analizatora korpusów lokalnie (jak na @Kale), teraz pojawia się następujący błąd: –

+0

Jest to typowy błąd podczas wdrażania węzła z heroku, i dzieje się, gdy nie dodasz parsera ciała w 'pakiet.json' zależności w folderze głównym aplikacji '" dependencies ": {" body-parser ":"^1.17.2 ", ...' –

5

Ta odpowiedź jest dużo prostsza. Przejdź do katalogu podstawowego i połącz się z wymaganymi modułami globalnymi.

npm link body-parser 

Nie ma potrzeby instalowania modułów w każdym miejscu. Jeśli moduł nie jest zainstalowany globalnie, powyższa komenda zainstaluje moduł globalnie, a następnie podłączy go lokalnie.

+0

Fantastycznie działa, bez ponownej instalacji. _/\ _ – HydTechie

Powiązane problemy