我有一个使用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文件在优化期间不存在于脱机状态。我相信还有很多其他原因,我的方法是个坏主意。
答案 0 :(得分:0)
我执行以下操作(请注意,这是Jade,我从未使用过require.js或backbone,但是只要您可以将变量从express传递到您的模板语言,您应该能够将JSON放在{{1你想要的任何元素上的属性。)
data-*
答案 1 :(得分:0)
如果您使用 webpack 之类的模块捆绑程序来捆绑JavaScript文件以供在浏览器中使用,则可以将Node.js模块重用于在浏览器中运行的客户端。换句话说,将您的设置或配置放在Node.js模块中,并在后端和客户端之间共享它们。
例如,您在config.js中具有以下设置:
const MY_THIRD_PARTY_URL = 'https://a.third.party.url'
module.exports = { MY_THIRD_PARTY_URL }
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)