Express中间件分隔实例

时间:2015-12-12 19:06:04

标签: node.js express

我正在为摄影网络应用程序制作个人项目。 对于node.js来说还是非常新的并表达。

我为此应用程序构建的以前的ASP.Net MVC应用程序使用SQL数据库索引照片并自动生成必要的照片库标记。

node-gallery

似乎是删除数据库依赖项的好选择。

然而,我似乎对Express中间件的工作方式感到困惑。



var nodeGallery = require('node-gallery');

//
//

app.use('/', new nodeGallery({
  staticFiles : 'public/photos/slideshow',
  urlRoot : 'photos/slideshow',
  render : false
}), function(req, res, next){
  rerurn res.render('index',{slideshow:req.data});
});

app.use('/portfolio', new nodeGallery({
  staticFiles : 'public/photos/portfolio',
  urlRoot : 'portfolio',
  render : false
}), function(req, res, next){
  console.log(req.data);
  return res.render('portfolio',{portfolio:req.data});
});




我想要为两个页面使用具有不同属性的节点库中间件(前面带有幻灯片和主库)。但是,无论路径如何,始终使用最后一个属性集。

使用express.Router并指定使用中间件的路由似乎也不起作用。

好像我错过了一些基本的东西。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

var nodeGallery = require('node-gallery');

将此视为创建节点库的类/ obj。

然后在第一个路线中将其属性设置为:

 new nodeGallery({
  staticFiles : 'public/photos/slideshow',
  urlRoot : 'photos/slideshow',
  render : false
})

但在第二个路线中,您使用第二组属性覆盖 nodeGallery

 new nodeGallery({
  staticFiles : 'public/photos/portfolio',
  urlRoot : 'portfolio',
  render : false
})

问题是您使用的是nodeGallery的相同实例,以定义不同属性的集合。

<强>解决方案:

1。创建多个节点库的对象,即:

var nodeGallery = {
 slideShow: require('node-gallery'),
 mainGallery: require('node-gallery'),
}

然后以nodeGaller.slideShow({staticFiles ....})

的形式访问它们

2。我认为更好的解决方案是在github页面上使用推荐的方法:

app.use('/gallery', require('node-gallery')({
  staticFiles : 'resources/photos',
  urlRoot : 'gallery', 
  title : 'Example Gallery'
})); 

您没有将node-gallery设置为任何一个变量,只是为该路线进行初始化。