app.set设置常量
发布于 3个月前 作者 xiaoyuxiaoyu 393 次浏览 来自 问答

我在配置文件中,使用app.set()设置了一个相当于常量的值,然后在控制器中使用app.get()来取这个值,使用它。 这种方法可以实现,但是我不清楚使用这种方法是否不妥善?求大神帮我分析分析

7 回复

你是指express么? 如果是常量的话,这个量是初始就定了的,那直接写成配置文件就行吧(写成一个module吧),但是这个方法也不太好,比如有多个模块要用到这个常量的时候,就得每次require,用app.set(),取用时必须能取到app这个变量,要是有些模块取不到app那就没戏了,那你必须传入app值。 对于你这种情况,用app.get()没错吧。。。。 BTW, app.get()方法有何不妥善的地方?

@soliury 你分析的情况和我的很类似,因为项目用compoundjs写的,并且有三种环境例如development,product,等。而在不同的环境下, 这个常量的值是不相同的。在我的每一个Controller中都能取到app这个变量。所以暂时在每个环境下的配置文件中用app.set()设置这个常量,在每一个controller中可以用app.get()取这个变量来使用(实际在项目中用到的这个常量的地方很少,现在只有一处使用)。 另外我同事也给我提供了一种方法:在Controller中判断当前是在那种使用环境,然后直接在这里设置这个常量值。 不知道这两种方法哪一种好?

我觉得既然是常量,就可以写配置,正对不同的controller写不同的配置。

@xiaoyuxiaoyu 在设置app.set的时候,就判断是哪个环境,然后赋给不同的值不就得了。

@soliury 在我的项目中,每一个环境都有一个相当于配置文件一样的文件,我的app.set()要在这几个文件中都写。。。

app.set() 必须用于服务器启动时。不能定义在路由中,它只是一个以服务事件为主体存在的数组。 如果不在路由级别定义app.set(),那无疑是很妥当的。重复设置某值的app.set(),会导致被后者覆盖。

嗯,我一般只在 express 需要使用 app.set 的时候用它,如果说共享常量的话,我倾向于放在 config.js 中。如果你不是一个 express 插件开发者,我觉得也没必要去使用 app.set。

回到顶部