我试图下载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')
})
答案 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()回调时,我的代码工作正常