在模块中未定义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);