Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带错误处理的外部扭曲函数_Javascript_Node.js_Express - Fatal编程技术网

Javascript 带错误处理的外部扭曲函数

Javascript 带错误处理的外部扭曲函数,javascript,node.js,express,Javascript,Node.js,Express,我有一个节点应用程序,用户可以提供自己的函数,根据用户提供的URL路径,我调用这个函数,如果出现错误,请求不会停止,因此我想在停止响应时,以某种方式获取调用方(如果有)中的错误,在这种情况下,记录要做什么 以免说这是用户提供的功能,如果我们在目录中有文件,这是正常工作 delete: function (req,res,Path) { var fileRelPath = 'C://'+ Path; fs.unlinkSync(Path); res.writeHead(2

我有一个节点应用程序,用户可以提供自己的函数,根据用户提供的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(),我是否应该在上面的invoke代码之后进行检查,如果没有显式结束它,如果是,如何检查它是否结束

我是说

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

您可以尝试以下方法。但是函数必须是同步的,就像您提供的示例一样。否则,
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)
});

谢谢投票!假设我想同时处理sync和async,我应该怎么做?有承诺吗?您能提供示例吗?@JhonDree-将该方法包装成承诺,并使用
co express
基本上将路由转换为生成器。@SwarajGiri-谢谢,您能提供示例吗?对于异步函数,在异步操作完成时,您需要从函数内部调用回调。