模块中未定义req.params



我有一个工作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未定义。我哪里错了?

谢谢!

您应该在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;

和你的服务器.js:

var express = require('express');
var app = express();
var ImageRouter = require('./routes/imageRouter');
app.use('/api/image', ImageRouter);

最新更新