在客户端和后端之间共享设置/配置

时间:2013-07-25 16:58:34

标签: javascript node.js backbone.js express requirejs

我有一个使用node.js后端和require.js / backbone前端的应用程序。 我的后端有一个配置/设置系统,根据环境(开发,生产,测试版)可以做不同的事情。我想将一些变量传播到客户端,让它们影响一些模板渲染(e.x更改标题或页面的URL)。

实现这一目标的最佳方法是什么?

我提出了一种方法来实现它,它似乎正在工作,但我不认为它是最聪明的事情,我无法弄清楚如何使它与requirejs优化器一起工作。 我所做的是在后端我公开/ api / config方法(通过GET)和客户端 我有以下模块config.js:

// This module loads an environment config
// from the server through an API

define(function(require) {
    var cfg = require('text!/api/config');
    return $.parseJSON(cfg);
});

任何需要配置的页面/模块都会执行:

var cfg = require('config');

正如我所说,我遇到了这种方法的问题,我无法编译/优化我的客户端代码 使用requirejs优化器,因为/ api / config文件在优化期间不存在于脱机状态。我相信还有很多其他原因,我的方法是个坏主意。

2 个答案:

答案 0 :(得分:0)

我执行以下操作(请注意,这是Jade,我从未使用过require.js或backbone,但是只要您可以将变量从express传递到您的模板语言,您应该能够将JSON放在{{1你想要的任何元素上的属性。)

data-*

答案 1 :(得分:0)

如果您使用 webpack 之类的模块捆绑程序来捆绑JavaScript文件以供在浏览器中使用,则可以将Node.js模块重用于在浏览器中运行的客户端。换句话说,将您的设置或配置放在Node.js模块中,并在后端和客户端之间共享它们。

例如,您在config.js中具有以下设置:

常规Node.js模块:config.js

const MY_THIRD_PARTY_URL = 'https://a.third.party.url'
module.exports = { MY_THIRD_PARTY_URL }

使用Node.js后端中的模块

const config = require('path-to-config.js')
console.log('My third party URL: ', config.MY_THIRD_PARTY_URL)

在客户端中共享它

import config from 'path-to-config.js'
console.log('My third party URL: ', config.MY_THIRD_PARTY_URL)