Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在客户端和后端之间共享设置/配置_Javascript_Node.js_Backbone.js_Express_Requirejs - Fatal编程技术网

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

Javascript 在客户端和后端之间共享设置/配置,javascript,node.js,backbone.js,express,requirejs,Javascript,Node.js,Backbone.js,Express,Requirejs,我有一个应用程序使用node.js backend和require.js/backbone frontend。 我的后端有一个配置/设置系统,根据环境(开发、生产、测试版)可以做不同的事情。我还想将一些变量传播到客户端,并让它们影响一些模板呈现(e.x更改页面的标题或URL) 实现这一目标的最佳方式是什么 我想出了一个方法来实现它,它似乎是可行的,但我不认为这是最明智的做法,我也不知道如何让它与requirejs optimizer一起工作。 我所做的是在后端公开/api/config方法(通过

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

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

我想出了一个方法来实现它,它似乎是可行的,但我不认为这是最明智的做法,我也不知道如何让它与requirejs optimizer一起工作。 我所做的是在后端公开/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 optimizer,因为在优化过程中脱机状态下不存在/api/config文件。我确信我的方法是个坏主意还有很多其他原因。

我做了以下工作(注意,这是Jade,我从来没有使用过require.js或backbone,但是只要您可以将express中的变量传递到模板语言中,您就应该能够将JSON放置在您想要的任何元素的
data-*
属性中。)

我执行以下操作(请注意,这是Jade,我从未使用过require.js或backbone,但是只要您可以将变量从express传递到模板语言中,就应该能够将JSON放置在所需元素的
data-*
属性中。)


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

例如,您在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);
});
Normal Node.js模块:config.js 使用Node.js后端中的模块 在客户端共享它
如果使用模块绑定器(如)绑定JavaScript文件以在浏览器中使用,则可以对在浏览器中运行的客户端重用Node.js模块。换句话说,将您的设置或配置放在Node.js模块中,并在后端和客户端之间共享它们

例如,您在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);
});
Normal Node.js模块:config.js 使用Node.js后端中的模块 在客户端共享它
您正在服务器端进行渲染吗?在我的例子中,它是一个单页webapp,所有视图都使用静态视图模板呈现在客户端上。哇,疯了!我从没试过。如何告诉客户显示什么?当您从后端发送响应时,无论环境如何,您是否总是发送相同的静态脚本?您可以修改响应以包含配置数据吗?另外,使用javascript生成页面是否会对SEO结果造成严重破坏?您正在服务器端进行渲染?在我的例子中,它是一个单页webapp,所有视图都使用静态视图模板呈现在客户端上。哇,疯了!我从没试过。如何告诉客户显示什么?当您从后端发送响应时,无论环境如何,您是否总是发送相同的静态脚本?您可以修改响应以包含配置数据吗?另外,使用javascript生成页面不会对SEO结果造成严重破坏吗?您找到了任何好的解决方案吗?我正在尝试做类似的事情。你有没有找到解决这个问题的好办法?我正在尝试做类似的事情。
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)