文件无法在我的express.js应用程序中下载

时间:2016-08-07 14:41:18

标签: node.js express

我试图下载pdf文件,如果node.js应用程序保存在我的公共目录中。我有以下路线下载pdf文件。但问题是我的文件我们不是从谷歌铬和邮递员下载。控制台中没有任何错误。代码是正确的,但文件我们无法下载。所以请告诉我这是什么问题。我有以下路线。

const express = require('express');
const bodyParser= require('body-parser')
var path = require('path')

const app = express();
app.use('/', express.static(__dirname + '/public'));
app.use(bodyParser.json())
app.use(bodyParser.urlencoded())
var CvRouter = express.Router();

    CvRouter.get('/', function(req, res,next){      
             var path=require('path');
             var file = "muhammadateek_cv.pdf";
             var path = path.resolve(".")+'/public/'+file;
             console.log('PATH=', path)
             res.setHeader('Content-disposition', 'attachment; filename=muhammadateek_cv.pdf');
             res.setHeader('Content-type', 'application/pdf');  
             res.download(path);
                 next();
            })
app.use('/', CvRouter);
app.listen(3000, function() {
  console.log('listening on 3000')
})

2 个答案:

答案 0 :(得分:1)

您需要使用路由器。

在收听之前添加以下行:

app.use('/', CvRouter);

<强>更新

您正在使用类似路由处理程序的中间件。

对于使用中间件,您需要使用:

CvRouter.get(function(req, res,next){      

                 next();
            })

但是你想完成请求并发回一个响应(通过下载),所以路由处理程序的正确语法如下:

CvRouter.get('/', function(req, res){      
             var path=require('path');
             var file = "muhammadateek_cv.pdf";
             var path = path.resolve(".")+'/public/'+file;
             console.log('PATH=', path)
             res.setHeader('Content-disposition', 'attachment; filename=muhammadateek_cv.pdf');
             res.setHeader('Content-type', 'application/pdf');  
             res.download(path);
            })

答案 1 :(得分:0)

我在res.download函数之后在路由器中使用next()回调。问题是每当我请求'/'url我的请求go t next()而不处理res.download()。当我删除next()回调时,我的代码工作正常