正文解析器节点模块返回“已弃用”消息[重复]
Posted
技术标签:
【中文标题】正文解析器节点模块返回“已弃用”消息[重复]【英文标题】:body-parser node module returning a 'deprecated' message [duplicate] 【发布时间】:2015-03-02 01:16:02 【问题描述】:我正在学习 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- 请熟悉的人告诉我在哪里可以找到信息。
谢谢。
【问题讨论】:
由于不推荐使用 bodyParser(),markupjavascript.com/2019/12/… 【参考方案1】:好吧...也许我应该阅读文档 - 而不是按照教程“这么说”...
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded( extended: false ))
// parse application/json
app.use(bodyParser.json())
似乎必须明确说明要在新版本中使用 WHICH 解析,其中教程(仅在 2014 年 5 月完成)显示 bodyParse() 不在乎,并且如果它是 json 则足够聪明以使用 JSON对象,如果不是,则进行 urlencoded - 显然不是这样。或者是以不推荐的方式在未来不受支持的情况。
【讨论】:
以上是关于正文解析器节点模块返回“已弃用”消息[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android:解析 XML DOM 解析器。将子节点转换为字符串