3

我不知道如何问这个问题,所以我将描述我在做什么,我希望得到一些启发。

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

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

配置.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"
}

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

脚本.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());

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

4

2 回答 2

3

一种正确的方法是使用流程环境。例如,您可以基于以下切换NODE_ENV

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

当然,您也可以使用自定义变量

const ipAddress = process.env.ORDER_SERVER;

然后可以在不同的服务器上将这些变量设置为不同的值。


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

于 2018-05-23T15:17:16.333 回答
3

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

于 2018-05-23T15:27:23.497 回答