我需要根据我们是在开发还是生产中设置不同的密钥。在没有固有运行时环境的客户端中执行此操作的好方法是什么?
谢谢!
一种方法是将环境变量从服务器注入到客户端的全局命名空间中。
例如,如果您在 PHP 中执行此操作:
<script>
var env = <?php echo $your_env_variable; ?>; // globally accessible variable
</script>
现在,您可以从在该脚本标记之后执行的任何 javascript 文件中访问该环境变量。
在节点中你会做同样的事情,但使用模板(例如 Jade):
script(type='text/javascript').
var env = passedInEnvVar
在 nodejs 中,指定环境的“官方”方式是使用“NODE_ENV”。由于您没有提到您用于提供 HTML 内容的框架,因此我将使用 expressjs 作为我的答案。
您可以在视图模板中简单地执行此操作(我正在使用 EJS)
var key = '<%= keys[process.env.NODE_ENV] %>'
您将需要准备一组与每个环境相对应的密钥
var keys = {
'development': 'dev-key',
'production': 'prod-key'
}
为什么不直接加载不同的脚本?您可以根据 GET 参数动态创建脚本,例如http://example.org/script.js?development=1,然后使用 PHP 等服务器端语言根据该参数更改代码内容。
您还可以在 Web 服务器上使用重写规则以使其看起来更干净。
页面头部的A<meta name='environment' content='<%= yourVariable %>' />
非常适合(ejs 示例,但你明白了)。
此方法将帮助您保持更严格的 Content-Security-Policy (no inline-script
),并且您无需在服务器中添加路由即可获得所需的值。