我有一个工作api,用于在我的server.js中的路由中提供图像,并希望将其抽象为一个单独的模块。
之前:
- if @experiment == 'b'
= render "show_b"
- else
= render "show"
我想要这样的事情:
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');
}
})
我尝试在我的imageRouter.js文件中写这样:
var ImageRouter = require('./routes/imageRouter');
app.use('/api/image/:filename', ImageRouter);
但是req.params.filename是未定义的。我哪里出错?
谢谢!
答案 0 :(得分:1)
您应该在get()
路由器上使用imageRouter.js
并在主应用上添加前缀。
use()
适用于中间件。
以下是imageRouter.js
:
var router = require('express').Router();
var fs = require('fs');
router.get('/:filename', function(req, res) {
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');
}
});
module.exports = router;
你的server.js:
var express = require('express');
var app = express();
var ImageRouter = require('./routes/imageRouter');
app.use('/api/image', ImageRouter);