外部扭曲功能,错误处理

时间:2015-07-14 06:49:16

标签: javascript node.js express

我有节点应用程序,用户可以提供自己的功能,并根据用户提供的一些URL路径调用此函数,如果出现错误请求不会停止的问题,所以我想以某种方式在调用者中获取错误(如果有的话)停止响应,在这种情况下记录要做什么?

以免说这是用户提供的功能,如果我们在目录中有文件,这是正常工作

delete: function (req,res,Path) {

    var fileRelPath = 'C://'+ Path;
    fs.unlinkSync(Path);
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end("File was deleted");
},

我从其他模块调用此函数来调用函数

plugin[fnName](req, res, Path);

如果文件不存在,我收到错误,进程调用不会停止... 我应该在上面的调用代码之后以某种方式检查是否调用res.end(),如果不是显式结束它,如果是,则检查它是否结束。

我的意思是

plugin[fnName](req, res, Path);
if(res.end was not invoked)
res.end("error occurred"  )
maybe to provide additional data somehow about the err ..

1 个答案:

答案 0 :(得分:1)

您可以尝试以下操作。但是该函数必须是同步的,就像您提供的示例一样。否则try..catch将无效。

var error;
try{
  plugin[fnName](req, res, Path);
}
catch(e){
  error = e
}

if(!res.headerSent){
  res.send(error);
}

对于异步操作,您必须以节点回调样式重写函数:

deleteAsync: function (req,res,Path,done) {
    var fileRelPath = 'C://'+ Path;
    fs.unlink(Path, function(err){
       if(err)
         return done(err)
       res.writeHead(200, { 'Content-Type': 'text/plain' });
       res.end("File was deleted");
    });


},

然后像这样打电话给他们:

plugin[fnNameAsync](req, res, Path,function(err){
  if(err)
     res.send(err)
});