使用Node.JS下载文件时出现奇怪错误

使用Node.JS下载文件时出现奇怪错误,node.js,download,express,mongoose,Node.js,Download,Express,Mongoose,这是Node.JS代码,它有两部分。第一个在主服务器文件中: app.get('/download/:photo', function (req, res){ dbs.imagenschema.find({ _id: req.params.photo }, function (err, imagen){ if (err) throw assert.ifError(err);; var file = __dirname + '/public/users/' + i

这是Node.JS代码,它有两部分。第一个在主服务器文件中:

app.get('/download/:photo', function (req, res){ 

   dbs.imagenschema.find({ _id: req.params.photo }, function (err, imagen){

     if (err) throw assert.ifError(err);;

     var file = __dirname + '/public/users/' + imagen.auid + '/' + imagen.name;

     var filename = path.basename(file);
     var mimetype = mime.lookup(file);

     res.setHeader('Content-disposition', 'attachment; filename=' + filename);
     res.setHeader('Content-type', mimetype);

     var filestream = fs.createReadStream(file);
     filestream.pipe(res);

   });

});
另一部分是
dbs.imagenschema
,但这一部分非常简单,它只是从
dbs
模块导出的图像的模式

这是一个te按钮,单击该按钮后,下载开始:

<a href="/download/<%= photo._id %>">
  <button class="btn btn-inverse"><i class="icon-download-alt icon-white"></i>  Download</button>
</a>
可能服务器认为
/download/fooid
是对我上面写的代码的请求,因为
/download/fooid
不发送任何带有EJS文件的响应,所以不可能得到这样的错误。有什么解决办法吗


谢谢你的预付款

您必须确保在
/:user/:id
路由之前声明
/download/:photo
路由,否则后者也将匹配
/download/fooid
,认为
download
是用户参数,
fooid
id
参数(对于Express,匹配按照声明的顺序进行:匹配请求的第一个路由将处理该请求)

因此:


我在我的VPS中尝试了它,但它不起作用。但是在本地工作中,您是直接访问VPS上的节点,还是通过类似nginx的方式访问节点?可能是缓存了原始的错误响应?
TypeError: Cannot read property 'background' of null
  at eval (eval at <anonymous> (/root/pixgalery/node_modules/ejs/lib/ejs.js:234:12), <anonymous>:30:4196)
  at /root/pixgalery/node_modules/ejs/lib/ejs.js:239:15
  at Object.exports.render (/root/pixgalery/node_modules/ejs/lib/ejs.js:277:13)
  at View.exports.renderFile [as engine] (/root/pixgalery/node_modules/ejs/lib/ejs.js:303:22)
  at View.render (/root/pixgalery/node_modules/express/lib/view.js:75:8)
  at Function.app.render (/root/pixgalery/node_modules/express/lib/application.js:500:10)
  at ServerResponse.res.render (/root/pixgalery/node_modules/express/lib/response.js:717:7)
  at /root/pixgalery/app.js:181:15
  at Promise.<anonymous> (/root/pixgalery/db.js:237:27)
  at Promise.<anonymous> (/root/pixgalery/node_modules/mongoose/lib/promise.js:133:8)
app.get('/:user/:id', function (req, res){

  dbs.getimage(req.params.id, req.params.user, function (user, img, fav, comments){

    if (img.type == 'music') {

      res.render('music.ejs', {

            user: user,
            photo: img,
            req: req.session.user,
            fav: fav,
            comments: comments

        });

    } else{

      res.render('photo.ejs', {

            user: user,
            photo: img,
            req: req.session.user,
            fav: fav,
            comments: comments

      });

    }

  });

});
// first this...
app.get('/download/:photo', ...);

// ...and then this.
app.get('/:user/:id', ...);