2015-06-23 25 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