当前位置: 首页 > 知识库问答 >
问题:

正文分析器节点模块返回“已弃用”消息[重复]

公羊瀚
2023-03-14

我正在学习节点。js-通过一些示例,我使用了“express”框架,安装了body parser(使用npm安装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端口上显示其“正常”监听。

当然,只是学习——我对包没有太多的经验,但是我把第一行作为“快递4”,不喜欢我的身体解析器版本——尽管我是从快递网站的链接上得到的。

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解析器的安装包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-能不能有个熟悉的人请给我点见解,在哪里可以找到信息。

非常感谢。

共有1个答案

宗晟
2023-03-14

嗯...也许我应该读文档——而不是按照教程“这样说”...

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

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

似乎必须明确说明在新版本中使用哪种解析,其中教程(仅在2014年5月完成)显示bodyParse()并不在意,如果它是JSON对象,它足够聪明,可以使用JSON,如果不是,则使用URLCoded——显然不是这样。或者,以一种不推荐的方式,这种情况在将来是不受支持的。

 类似资料:
  • 我试图在我的代码中使用Bodyparser,但代码被编辑器本身剪切,并表示Bodyparser已被弃用。我尝试了一些我在网上找到的替代代码,但都不起作用。附件是我正在使用的代码的截图。密码 代码:

  • 你好,你能给我解释一下吗,为什么不使用我有一个错误 正在加载com类。mysql。jdbc。驾驶员这是不推荐的。新的驱动程序类是com。mysql。cj。jdbc。驾驶员驱动程序通过SPI自动注册,通常不需要手动加载驱动程序类。 非常感谢你的帮助

  • 最近我开始使用node。js。当我在我的一个项目中完成一个需求时,我面临一个问题,我应该能够将一些数据动态写入csv文件,并让它作为弹出窗口提示用户下载(如我们通常看到的,带有保存和取消选项)。在谷歌搜索了一段时间后,我决定使用csv npm模块https://github.com/wdavidw/node-csv-parser.我能够将数据写入文件并使用此模块进行保存。我想提示一个弹出窗口来保存

  • 返回当前whisper节点旳信息。 调用: web3.shh.getInfo([callback]) 参数: callback:Function - 可选的回调函数,其第一个参数为错误对象,第二个参数为结果 返回值: Object - 节点信息描述对象,具有以下属性: messages - Number: 当前浮动消息总数 maxMessageSize - Number: 当前消息大小上限,以字

  • 我正在尝试解析一个XML文档,但由于某种原因,我无法从任何东西中获取任何子节点。我已经厌倦了我所知道的一切。我最初尝试使用Dom4J,但在命名空间方面遇到了重大困难。现在我正在尝试使用标准DOM解析器。 我已经阅读了oracle教程以及其他教程,但没有看到任何关于为什么我最基本的功能失败的建议。 我将首先分享我的代码: 所以简单地说,我想做的就是返回根节点(即“文档”)的子节点。)有一个应该返回的