【发布时间】:2015-09-09 16:33:53
【问题描述】:
我有一个工作 api 用于在我的 server.js 中的路由中提供图像,并希望将其抽象为一个单独的模块。
之前:
app.get('/api/image/:filename', function(req, res){
var resourcePath = 'uploads/public/projectnumber/issues/small/' + req.params.filename + '.png';
console.log(resourcePath)
if(fs.existsSync(resourcePath)) {
var file = fs.readFileSync(resourcePath);
res.writeHead(200, 'Content-Type:application/pdf:image/png');
res.end(file,'binary');
}
else {
res.send(400, 'No image found');
}
})
我想要这样的东西:
var ImageRouter = require('./routes/imageRouter');
app.use('/api/image/:filename', ImageRouter);
我已经尝试在我的 imageRouter.js 文件中这样写:
var express = require('express');
var fs = require('fs');
var router = express.Router();
router.use(function(req, res, next) {
var resourcePath = 'public/images/' + req.params.filename + '.png';
if(fs.existsSync(resourcePath)) {
var file = fs.readFileSync(resourcePath);
res.writeHead(200, 'Content-Type:application/pdf:image/png');
res.end(file,'binary');
}
else {
res.send(400, 'No image found');
}
next();
});
module.exports = router;
但是 req.params.filename 是未定义的。我哪里出错了?
谢谢!
【问题讨论】:
-
当您执行
console.log(req.params);时,控制台会显示什么? -
这是预期行为。 Arnaud 的解决方案应该有效。更多细节在这里 -> github.com/strongloop/express/issues/2660