Node.js 是什么导致我的请求超时?

Node.js 是什么导致我的请求超时?,node.js,express,promise,es6-promise,multer,Node.js,Express,Promise,Es6 Promise,Multer,我试图创建一个路由,允许用户上传一个csv文件,然后异步地将该文件解析为Json,并为每一行实例化一个模型。我曾尝试使用承诺来实现这一点,但函数请求一直超时,我看不到它在哪里被破坏。以下是代码(/app/index): 以下是我将文件发布到此路由时heroku日志的输出: (node:49) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): undefined 2018-08-09T

我试图创建一个路由,允许用户上传一个csv文件,然后异步地将该文件解析为Json,并为每一行实例化一个模型。我曾尝试使用承诺来实现这一点,但函数请求一直超时,我看不到它在哪里被破坏。以下是代码(/app/index):

以下是我将文件发布到此路由时heroku日志的输出:

(node:49) UnhandledPromiseRejectionWarning: Unhandled promise rejection 
(rejection id: 2): undefined
2018-08-09T03:57:17.240599+00:00 app[web.1]: (node:49) [DEP0018] 
DeprecationWarning: Unhandled promise rejections are deprecated. In the 
future, promise rejections that are not handled will terminate the Node.js 
process with a non-zero exit code.
2018-08-09T03:57:47.205596+00:00 heroku[router]: at=error code=H12 
desc="Request timeout" method=POST path="/api/distributor/1/upload" host=fba- 
prof-prods.herokuapp.com request_id=40e1864b-fa71-49aa-8fdf-cedb1752edef 
fwd="73.92.68.83" dyno=web.1 connect=1ms service=30284ms status=503 bytes=0 
protocol=https

如果您能给我指出任何正确执行类似操作(处理上传和异步解析大型csv文件)的参考资料/示例,我也将非常感激。我不知道该怎么做,似乎找不到任何好的资源!谢谢。

您需要这样做:

function uploadAsync(req,res){
    return new Promise((resolve, reject) => {
         upload(req,res,function(err){
             if(err !== null) return reject(err);
             resolve();
         });
    });
}

请注意
resolve()
。这是这里的关键,因为你没有按照承诺做任何事情。

你需要拒绝/解决你的承诺-
新承诺((解决,拒绝))
好的,我改变了,但我仍然得到同样的结果。我认为以前我的一些回调没有返回值,但我认为现在它们都有返回值。如果是一个大文件,网络很可能会超时。您可以在路由中增加网络超时请求setTimeout(600*1000)。这只会活10分钟谢谢你,桑德普。我在这方面已经取得了一些进展,但我仍然不确定如何以可以解析文件的形式获取文件。我这里有最新的细节,好吧,我试着合并了。我还更新了我当前的日志输出!这里的东西太多了。。。你能把它清理干净以便一步一步地走吗。比如清理
中的所有内容。然后((req,res)=>{
和那里的console.log东西。在我们链接其余的东西之前,让我们确保该部分按预期工作。好主意@Akrion。我清除了。然后((req,res)=>{调用并将其替换为console.log(req)。它没有记录任何内容,并且我仍然得到相同的输出和超时错误,因此我猜第一个承诺中一定有一个问题?这是因为您没有将任何内容传递给
resolve()
,以便您可以在
中获取内容,然后
将控制台.log(res)放在
上载(req,res,function(err)中
函数并查看是否打印出任何内容…然后只将需要的内容从该函数传递到resolve()中作为一个参数,然后你应该在
然后
中获取它。请参阅承诺。解析文档:谢谢,@Akrion。我在这方面取得了一些进展,但我仍然不确定如何以可以解析它的形式获取文件。我这里有更新的详细信息
function uploadAsync(req,res){
    return new Promise((resolve, reject) => {
         upload(req,res,function(err){
             if(err !== null) return reject(err);
             resolve();
         });
    });
}