2015-06-23 18 views
2

不确定我有在我的server.js路线提供图片的工作API,并且想要抽象到一个单独的模块。req.params模块

前:

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未定义。我哪里错了?

谢谢!

+0

什么显示控制台,当你做'的console.log(req.params);'? –

+0

这是打算的行为。阿诺的解决方案应该工作。更多细节在这里 - > https://github.com/strongloop/express/issues/2660 – Jordonias

回答

1

你应该在你的路由器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); 
+0

工程就像一个魅力。非常感谢! – mottosson

+0

那些谁需要引用像'/ URL参数:在另一个文件名”,看看这个问题:http://stackoverflow.com/questions/28977253/express-router-undefined-params-with-router-use-when -split-跨文件 – George