我是node.js的新手,并表示自己,并且已经尝试了一段时间。现在,我对与解析请求正文有关的快速框架的设计感到困惑。来自快递的官方指南:
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);
设置完所有中间件之后,然后添加要处理的路由:
app.post('/test', function(req, res){
//do something with req.body
});
这种方法的问题在于,在检查路由有效性之前,将首先解析所有请求正文。解析无效请求的主体似乎效率很低。甚至更多,如果我们启用上传处理:
app.use(express.bodyParser({uploadDir: '/temp_dir'}));
任何客户端都可以通过上传任何文件来轰炸服务器(通过向任何路由/路径发送请求!),所有文件都将被处理并保存在“ /
temp_dir”中。我不敢相信这种默认方法正在被广泛推广!
我们当然可以在定义路线时使用bodyParser函数:
app.post('/test1', bodyParser, routeHandler1);
app.post('/test2', bodyParser, routeHandler2);
甚至可能解析处理路线的每个函数中的主体。但是,这样做很繁琐。
有没有更好的方法只对所有有效(定义的)路由使用express.bodyParser,并且仅在选定的路由上使用文件上传处理功能,而无需重复很多代码?
您的第二种方法很好。记住,你也可以通过中间件功能阵列app.post
,app.get
和朋友。因此,您可以uploadMiddleware
使用处理POST正文,上载等内容的东西定义一个名为的数组,并使用该数组。
app.post('/test1', uploadMiddleware, routeHandler1);
这些示例适用于初学者。初学者代码可帮助您在第一天工作,而高效而安全的生产代码通常大不相同。关于不接受到任意路径的上传,您肯定有道理。至于解析所有请求主体是“非常低效的”,则取决于无效/攻击POST请求与发送到您的应用程序的合法请求的比率。在您的网站开始流行之前,攻击探测请求的平均背景辐射可能不足以担心。
另外,这里是一个博客文章,其中包含有关bodyParser安全性注意事项的更多详细信息。
问题内容: 我一直在尝试在Node.js中调用D3。我首先尝试使用脚本标签从D3的网站导入d3.v2.js D3的作者建议一个人应该“ npm install d3” …我做到了,我可以在节点控制台中成功调用它: 但是,当尝试使用“ node app.js”从app.js调用它时,我得到: 我意识到,D3的作者在其他地方已经明确规定了应该使用画布: https://github.com/mbost
本文向大家介绍express的中间件bodyParser详解,包括了express的中间件bodyParser详解的使用技巧和注意事项,需要的朋友参考一下 bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理. 下面是一个文件上传的例子. 建立一个1.html页面 上面的XMLHttpRequest对象与FormData对象时HT
问题内容: 在我的程序中,我从另一个API模块调用了我的函数: 模块代码: 执行立即返回,但是,并因此包含请求对象和请求体- 样,不需要响应体。 我做错了什么?怎么修?正确的用法是什么,或仅与此处提到的Promise一起正确使用:为什么await对于节点请求模块不起作用?以下文章提到了可能的方法:在Node.js中掌握Async Await 。 问题答案: 您需要使用模块,而不是模块或。 对返回p
问题内容: 我已经在一些地方看到过使用它,还不能完全知道它的用途。 https://github.com/andrewvc/node-paperboy/blob/master/lib/paperboy.js#L24 https://github.com/substack/node-browserify/blob/master/index.js#L95 Node.js 的主要/正确用例是什么?文档基
问题内容: 看来这应该是一个相当简单的问题,但是我很难确定如何解决它。 我正在使用Node.js + Express构建一个Web应用程序,并且发现表达暴露的connect BodyParser在大多数情况下非常有用。但是,我想对多部分表单数据POSTS进行更细粒度的访问- 我需要将输入流通过管道传输到另一台服务器,并且希望避免先下载整个文件。 但是,由于我使用的是Express BodyPars
问题内容: 我试图了解Java 8中API 的方法。 我有简单的逻辑: 但这会导致编译错误: 我当然可以做这样的事情: 但这就像混乱的支票一样。 如果我将代码更改为此: 代码变得越来越脏,这让我想到了回到旧支票。 有任何想法吗? 问题答案: 需要作为参数。您正在向其传递类型为void的表达式。因此,它不会编译。 使用者应被实现为lambda表达式: 甚至更简单,使用方法参考: 这基本上与 想法是仅