req.params在模块中未定义

时间:2015-06-23 18:04:35

标签: node.js express

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

谢谢!

1 个答案:

答案 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);