Node / Express,如何将 bodyParser 配置为仅在某些路由上使用 raw

use*_*480 7 node.js express long-integer

我不太确定我是否正确地接近这个,但我的问题是,我通常在我的 API 端点接收 json 数据,然后我从 json req.body 数据创建一个模型实例......我正在使用平均堆栈..

我现在遇到的问题是,我的模型的字段之一是具有 18 个位置的猫鼬长数据类型。但是,bodyParser 会解析数字并将数字的 las 3 个位置四舍五入。我将它用于 _id 字段,因此出现重复的键错误。

我通过 Python 手动构建和发送数据进行测试,并使用 _ast_lib_eval(document) 从我构建的 json 文档中去除所有字符串引号。因此,以某种方式 json bodyParser 正在获取正文并获取数字但切断(或舍入)数字字段,因为我猜,它本机不支持这么长的数字......我可以为某些路线使用另一个 bodyParser 可能...... . 但我不确定如何配置它。

现在最好的方法是什么?我是否必须使用另一个解析器,从而将我的数据作为纯文本或原始数据发送给所有 api 端点?那意味着我必须重做一切以使其适合解析器,对吗?通常的格式是json....

或者我可以在从 bodyparser 解析之前以某种方式从 req.body 获取“原始”数据?这将是手动正确获取数字的最佳方法......但我不知道是否有办法做到这一点......

Jur*_*can 5

根据规范,您可以在所有端点上使用特定的自定义 bodyparser

app.post('/some/special/route', bodyParser.json({verify:function(req,res,buf){req.rawBody=buf}}))
app.use(bodyParser.json())
Run Code Online (Sandbox Code Playgroud)

gh问题

  • 但我仍然有问题,我发送到 url 的发布请求有一个标准标头“application/json”....即使使用作为参数传递的自定义解析器,它也无法工作.. (2认同)