2

私は Node.js を学習している最中です - そしていくつかの例を通して作業する中で、私は「express」フレームワークを使用しており、body-parser (npm install body-parser を使用) をインストールしましたが、うまくいきました.. .ただし、アプリを起動すると、ノードには次のように表示されます。

body-parser deprecated bodyParser: use individual json/urlencoded middlewares: app.js:30:11
body-parser deprecated undefined extended: provide extended option: node_modules\body_parser\index.js:85:29

ただし、ポート xxxx でリッスンしている「通常の」状態が表示されます。

もちろん、ただ学んでいます-私はパッケージの経験が豊富ではありませんが、最初の行を「express 4」と見なし、私のバージョンの body-parser が好きではありません-express のリンクから取得しましたサイト。

http://expressjs.com/resources/middleware.html
https://github.com/expressjs/body-parser?_ga=1.200820398.1885847446.1420349783 

私のアプリのjsは現在このように見えます-そしてそれは機能しているので、このメッセージを「受け取る」方法がわかりません。(「 app.use( bodyParser() );」のある行は、上記の 30 行目の参照です)

var express = require( 'express' );
var path = require( 'path' ); 
var bodyParser = require( 'body-parser' );

var app = express();

// configure app
app.set( 'view engine', 'ejs' );
app.set( 'views', path.join( __dirname, 'views' ) );

// use middleware
    // Body Parser for express
    app.use( bodyParser() ); // ****** this is line 30 referenced in the msg above *****


// ** NOTE this data is here for our learning scenario - but we'd normally be calling a persistentan datastore (such as a db) to get the data
var todoItems = [
         { id: 1, desc: 'one' }
        ,{ id: 2, desc: 'two' }
        ,{ id: 3, desc: 'three' }
    ];


// define routes
app.get( '/', function( req, res ) {
    res.render( 'index', {
        title: 'My 1st Node App'
    ,items: todoItems
    });
});

app.post( '/add', function( req, res ) {
    // handle the post data (need middleware (body_parser) to handle 'body'..express does not come with default )
    var newItem = req.body.newItem;

    //debug purposes
    console.log( newItem );

    // do something with the data - *NOTE: normally we'd put it to a persistent datastore
    todoItems.push({
         id: todoItems.length + 1
        ,desc: newItem
    });

    // redirect the user
    res.redirect( '/' );

});


app.listen( 1337, function() {
    console.log( 'ready on Port 1337.' );
});

body-parser のインストール済みパッケージの index.js は次のようになります。

/*!
 * body-parser
 * Copyright(c) 2014 Douglas Christopher Wilson
 * MIT Licensed
 */

/**
 * Module dependencies.
 */

var deprecate = require('depd')('body-parser')
var fs = require('fs')
var path = require('path')

/**
 * @typedef Parsers
 * @type {function}
 * @property {function} json
 * @property {function} raw
 * @property {function} text
 * @property {function} urlencoded
 */

/**
 * Module exports.
 * @type {Parsers}
 */

exports = module.exports = deprecate.function(bodyParser,
    'bodyParser: use individual json/urlencoded middlewares')

/**
 * Path to the parser modules.
 */

var parsersDir = path.join(__dirname, 'lib', 'types')

/**
 * Auto-load bundled parsers with getters.
 */

fs.readdirSync(parsersDir).forEach(function onfilename(filename) {
    if (!/\.js$/.test(filename)) return

    var loc = path.resolve(parsersDir, filename)
    var mod
    var name = path.basename(filename, '.js')

    function load() {
        if (mod) {
            return mod
        }

        return mod = require(loc)
    }

    Object.defineProperty(exports, name, {
        configurable: true,
        enumerable: true,
        get: load
    })
})

/**
 * Create a middleware to parse json and urlencoded bodies.
 *
 * @param {object} [options]
 * @return {function}
 * @deprecated
 * @api public
 */

function bodyParser(options){
    var opts = {}

    options = options || {}

    // exclude type option
    for (var prop in options) {
        if ('type' !== prop) {
            opts[prop] = options[prop]
    }
    }

    var _urlencoded = exports.urlencoded(opts)
    var _json = exports.json(opts)

    return function bodyParser(req, res, next) {
        _json(req, res, function(err){
            if (err) return next(err);
            _urlencoded(req, res, next);
        });
    }
}

これは29行目に表示されます-これがメッセージのソースであると想定する必要があります

exports = module.exports = deprecate.function(bodyParser, 'bodyParser: use individual json/urlencoded middlewares')

趣旨がわからないけど?私が言ったように-物事は「機能しているようだ」-私のコンソールにはかなりの数の「js警告」がありますが、それでも.

質問だと思います。1- ノード パッケージでは、このタイプのメッセージは正常ですか? 2- そうでない場合は、どうすればよいですか 3- 詳しい方、どこで情報を入手できるか教えてください。

ありがとうございました。

4

1 に答える 1

10

まあ...多分私はドキュメントを読むべきです-チュートリアルの「そう言う」に従う代わりに...

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

チュートリアル (2014 年 5 月にのみ行われた) は bodyParse() が気にしないことを示しており、それが json オブジェクトである場合は JSON を使用するのに十分スマートであり、そうでない場合は urlencoded - 明らかにそうではありません。または、非推奨の方法で、将来サポートされなくなる可能性があります。

于 2015-01-04T08:58:15.203 に答える