多次获取路线的麻烦

时间:2015-12-15 19:57:42

标签: node.js express

我在节点5.2.0上使用express.js 4.2.0。 起初我在我的app.js

var routes = require('./routes/form');
app.get('/', routes);

和form.js

var routes = require('express').Router();
routes.get('/', function(req, res) {
  res.render('form',{title:'Login',userField:'Username',passField:'Password',photos: photos});
});
module.exports = routes;

它工作正常,我到了localhost:3000/,我得到了表格。

现在我想添加一些代码,所以当我访问localhost:3000/YY/download时,它会根据YY(ID)自动下载图像。

所以现在我在app.js

var routes = require('./routes/form');
var download = require('./routes/form');

app.set('multimedia', __dirname + '/public/multimedia');
app.get('/', routes);
app.get('/:id/download', download(app.get('multimedia')));

并在form.js

var routes = require('express').Router();

routes.get('/', function(req, res) {
  res.render('form',{title:'Login',userField:'Username',passField:'Password',photos: photos});
});

var download = function(dir){
    return function(req,res,next){
        var path;
        if(req.params.id==='01')
        {path = dir+ '/01.jpg';}
        else
        {path = dir+'/02.jpg';}
        res.download(path);
    } 
}

module.exports = routes;
module.exports = download;

访问localhost:3000/YY/download工作正常,但是访问localhost:3000/不起作用。 GET正在等待,最终页面永远不会加载。

请帮我解决这个问题,因为我很困惑。

非常感谢。

1 个答案:

答案 0 :(得分:1)

当您拨打两个电话时,您正在覆盖.exports中的form.js个对象:

module.exports = routes;
module.exports = download;

所以你永远不会出口路由器而快递正在收到令人困惑的指令(路由部分匹配,但它没有让路由器返回)。

如果你真的想保持这两个对象可以导出,那就行了     module.exports.routes = routes;     module.exports.download = download;

并相应地更改对它的任何引用(<obj>.routes等。)

我还建议将download()移动到form.js路由逻辑中,而不是在app.js中公开它。 :)