特快专递中的私人图片路线最终出现错误

时间:2018-08-20 03:23:07

标签: node.js express authentication

我正在尝试建立一个图片库网站,在此网站上,只有登录用户才能查看所有图片。互联网上的大多数解决方案都假定任何人都希望将其图像放置在静态路径上,并在涉及图像时将其提供给任何人。这是我所做的。我做了一个GET路由,该路由发送带有受中间件保护的res.sendFile()的图像,该中间件检查身份验证,我只是将该路由添加到页面上image标签的src中。我简直不敢相信!!在我的桌面上运行没有任何问题。但是,当我在树莓派上运行该问题时,问题就出来了,这很慢。 这是错误消息。

curl -X POST https://linkexample.com -H "Content-Type: application/json" -d '{"timestamp": '+ @time +' " UTC", "lat":' + @LatRecord +', "lon": '+ @LonRecord +', "speed": '+ @speed +', "course":'+ @course +'}'

这是随机发生的,当我回到发生该事件的相同路线时,它工作正常。经过一段时间的测试,我发现在页面上加载图像时打开不同的路线时最有可能引发该错误。

这是我的代码。 顺便说一句,我正在使用护照本地策略进行身份验证。

这是我的问题路线

Error: Can't set headers after they are sent.
    at validateHeader (_http_outgoing.js:491:11)
    at ServerResponse.setHeader (_http_outgoing.js:498:3)
    at ServerResponse.header (/home/pi/dj-project/node_modules/express/lib/response.js:767:10)
    at ServerResponse.contentType (/home/pi/dj-project/node_modules/express/lib/response.js:595:15)
    at ServerResponse.sendStatus (/home/pi/dj-project/node_modules/express/lib/response.js:357:8)
    at res.sendFile (/home/pi/dj-project/routes/images.js:37:11)
    at /home/pi/dj-project/node_modules/express/lib/response.js:430:22
    at onerror (/home/pi/dj-project/node_modules/express/lib/response.js:1040:5)
    at Array.onfinish (/home/pi/dj-project/node_modules/express/lib/response.js:1058:21)
    at listener (/home/pi/dj-project/node_modules/on-finished/index.js:169:15)
    at onFinish (/home/pi/dj-project/node_modules/on-finished/index.js:100:5)
    at callback (/home/pi/dj-project/node_modules/ee-first/index.js:55:10)
    at Socket.onevent (/home/pi/dj-project/node_modules/ee-first/index.js:93:5)
    at emitOne (events.js:121:20)
    at Socket.emit (events.js:211:7)
    at onwriteError (_stream_writable.js:418:12)

这是检查上述路由的中间件

router.get('/:typename/:album/thumbnail',function(req,res){
    try{
    res.sendFile(path.resolve('./images',req.params.typename,req.params.album,'01.jpg'),(err)=>{
      if(err)
      res.sendStatus(404);
    });
    }
    catch(err){
      res.sendStatus(404); 
    }
});

router.get('/:typename/:album/:file',function(req,res){
    var {typename,album,file} =req.params;
    try{
    res.sendFile(path.resolve('./images',typename,album,file),(err)=>{
      if(err)
      res.sendStatus(404);
    });
    }
    catch(err){
      res.sendStatus(404);
    }
});

这是我的app.js

middleWares.checkAuthenticationImages = function(req, res, next){
    if(req.isAuthenticated()){
        return next();
    }else{
        res.end();
    }
}

非常感谢有人为我回答这个问题。

0 个答案:

没有答案