如何正确分配开发变量和生产变量?

时间:2018-05-23 15:12:16

标签: javascript node.js express

我不知道如何提出这个问题,所以我将描述我在做什么,我想要一些启示。

我正在使用nodeexpress进行服务器端渲染。

当我开发Web应用程序时,有一个模块包含一个变量,该变量在所有快速路由中共享,而不是硬编码。

config.js

module.exports = {
    ipAddress: "http://localhost:8080"
}

index.js 路线

var config = require("../../config.js");

router
    .get('/', function (req, res) {
        var html = `
            <div class="content">
                <a href="${config.ipAddress}/orders">Orders</a>
                <a href="${config.ipAddress}/invoices">Invoices</a>
            </div>
        `
        res.send(html);
    });

module.exports = router;

在部署应用时,我手动config.js更改为服务器的IP地址:

module.exports = {
    ipAddress: "http://255.255.255.255"
}

另一个例子是HTML头中引用的scripts.js文件,它处理DOM更改。同样,服务器IP地址放在变量中。

scripts.js中

var ipAddress = "http://localhost:8080"; // To be changed into "http://255.255.255.255"

function placeOrder() {
    fetch(`${ipAddress}/place-order`, {
        method: "POST",
        headers: {
            "Accept": "application/json",
            "Content-type": "application/json"
        }
    })
    .then((res) => res.json())
    .then((data) => xonsole.log(data))
    .catch((err) => console.log(err));
}

document.getElementById("submit-order").addEventListener("click", () => placeOrder());

自动处理这些变量的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

是否有理由完全符合参考资格?如果您的目录结构相同,则可以使用相对引用,例如将'$ {ipAddress} / place-order'更改为'/ place-order'

答案 1 :(得分:2)

一种正确的方法是使用流程环境。例如,您可以根据console.log( this.state.users )

进行切换
NODE_ENV

您肯定也可以使用自定义变量

 const ipAdress = process.env.NODE_ENV === "production" ? "http://255.255.255" : "http://localhost";

These variables can then be set to different values on different servers.

要将更改传递给 clientside javascript ,您需要将它们写入服务器上某处传送到客户端的文件中。这可以通过模板轻松完成,例如EJS。