尽管我已经安装了它,为什么对node.js body-parser的调用会失败?

时间:2015-08-05 15:38:23

标签: node.js express body-parser

我开始学习node.js并试图找出如何获取POST请求的内容。我正在尝试按照in this post的说明进行操作。 到目前为止,我已经成功安装了node.js(在Windows 7上)并表达,并且能够让我的第一个脚本工作。但是当我尝试使用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);
});

// 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会抛出一个错误,说“无法找到模块正文解析器”。我做错了什么?

根据@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” - 安装似乎有效,但它对文件错误没有任何影响。

4 个答案:

答案 0 :(得分:31)

正如Kevin B所说,你必须在本地安装body-parser 并将其保存到清单中:

npm install --save body-parser

答案 1 :(得分:7)

这个答案要简单得多。转到基目录并链接到所需的全局模块。

npm link body-parser

无需在整个地方安装模块。如果未全局安装模块,则上述命令将全局安装模块,然后在本地链接到该模块。

答案 2 :(得分: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"
}

答案 3 :(得分:0)

我遇到了同样的错误,在安装Express之后我得到了类似的错误

.scroll-bar .track { -fx-background-color: black; } .scroll-bar .thumb { -fx-background-color: brown; } .corner { -fx-background-color: black; } 安装此错误后,错误是

Cannot find module 'body-parser'等等

Cannot find module 'merge-descriptors'

这些所有模块都是express的依赖项。如果在不使用任何模块的情况下执行“ npm install”或“ npm install -g”,则会安装所有缺少的依赖项。

要解决此问题,我首先卸载了express,然后安装了Express,然后立即执行“ npm install”。这样就解决了所有错误。