在模块中未定义req.params
我有一个在我的server.js路由服务图像的工作API,并要抽象它到一个单独的模块。
之前:
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是未定义的。 我哪里错了?
谢谢!
你应该在你的imageRouter.js
路由器上使用get()
,并在你的主应用上加前缀。
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);