8

我正在使用 express 来设置 API,我遇到了这行代码:app.use(express.json( { extended: false } ));

我已经看过 express 的文档,但是我没有找到这个方法,是文档缺失还是我遗漏了什么?

4

3 回答 3

4

我找到了答案,虽然它很奇怪。这行代码以某种方式工作,即使它从不同的方法中接受一个选项。

https://expressjs.com/en/api.html#express.urlencoded

此选项允许在使用 querystring 库(如果为 false)或 qs 库(如果为 true)解析 URL 编码数据之间进行选择。“扩展”语法允许将丰富的对象和数组编码为 URL 编码格式,从而提供类似 JSON 的 URL 编码体验。

于 2019-09-02T21:50:21.680 回答
4

答案来自查看实际的 Express 和 body-parser 代码......

如果你在这里express.json()查看该方法的 Express 代码,你会发现它是来自 body-parser 模块的方法的直接传递。.json()

 // from express.js
 exports.json = bodyParser.json;

所以,如果你再去看看 body-parser 文档,中间件的extended选项就没有了。body-parser.json()

正如您所发现的,该extended选项已记录在body-parser.urlencoded()中间件中。但是,由于这与.json()中间件方法不同,因此该代码似乎误以为将extended选项与.json()中间件一起使用。

如果您查看中间件的代码body-parser.json(),您会发现代码中根本没有对extended选项的引用。

因此,它似乎是在您显示的代码中错误传递的选项,随后被 express/body-parser json 中间件忽略。

于 2019-09-02T22:29:25.417 回答
2

你不是。这显然是一个错误。作为 [options],您可以传递以下内容:inflate、limit、reviver、strict、type、verify

https://expressjs.com/en/api.html#express.json

于 2019-09-02T21:37:16.247 回答