web-dev-qa-db-ja.com

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

// 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」をローカルおよびグローバルにインストールしてみました-インストールは機能しているように見えますが、ファイルエラーに違いはありません。

16
Martin K

私は根本的に間違ったことをしていたと思います-私は基本に戻り、今度は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
Martin K

Kevin Bが述べたように、body-parserローカルそしてマニフェストに保存します:

npm install --save body-parser
33
Taylor Swanson

この答えははるかに簡単です。ベースディレクトリに移動し、必要なグローバルモジュールにリンクします。

npm link body-parser

モジュールをあちこちにインストールする必要はありません。モジュールがグローバルにインストールされていない場合、上記のコマンドはモジュールをグローバルにインストールし、ローカルにリンクします。

7
Mel Lord-Lloyd

Expressをインストールした後、次のようなエラーが発生するのと同じエラーが発生しました

Cannot find module 'body-parser'これをインストールした後のエラーは

Cannot find module 'merge-descriptors'など

Cannot find module 'finalhandler'

Cannot find module 'array-flatten'

これらのすべてのモジュールは、Expressの依存関係です。モジュールなしで「npm install」または「npm install -g」を実行すると、欠落しているすべての依存関係がインストールされます。

これを修正するには、まずExpressをアンインストールしてから、同じものをインストールしてすぐに「npm install」を実行します。これにより、すべてのエラーが修正されました。

0
Rahul Sonone