【问题标题】:How to set a server name or host name globally and use it in any file?如何全局设置服务器名或主机名并在任何文件中使用?
【发布时间】:2019-09-15 15:38:03
【问题描述】:

我正在使用 node js 在 graphql 中工作。我想获取服务器的主机名并在文件的任何位置使用它。

这是我的代码:

app.use('/api',graphqlHTTP((req,res)=>({

    context:{
      oauth_token:req.oauth_token,
      host : req.headers['host'],
      ip: req.ip
    },
    schema,
    graphiql: true,       
})));

我正在通过解析器在架构文件中访问它。喜欢:

resolve: (parent, args, context, resolveInfo) => {
        host = context.host;
}

在这里我可以获取主机名。但是我怎么能在任何文件中使用它呢?

【问题讨论】:

    标签: node.js express graphql graphql-js express-graphql


    【解决方案1】:

    如果主机名是静态值并且是您可以控制的,我建议使用节点环境变量。有两种常用的使用方法: 1.命令行 2. .env 文件

    1) 简单地用等号表示变量的名称,然后是值本身。之后启动你的节点服务器

    HOST=localhost node server.js
    

    然后你可以像这样在你的应用中使用它:

    // server.js
    const host = process.env.HOST;
    

    2) 在应用的根目录中创建一个 .env 文件并在其中设置变量:

    HOST=localhost
    PORT=8080
    API_KEY=123123
    

    我个人更喜欢第二个,因为您只需设置一次,无需在每次启动服务器时在控制台中输入。只是不要忘记将其包含在您的 .gitignore 中,因为您的历史记录将引用您的秘密

    【讨论】:

    • 能否请您提供更多关于第二种方法的详细信息?或者你能给我一些链接,我可以清楚地理解吗?
    • 是的,medium 上有很多有用的文章,也许这篇文章会为您提供更多背景信息medium.com/the-node-js-collection/…
    • 我创建了一个 .env 文件。您能否解释一下我如何为不同的服务器提供凭据?
    • 抱歉,我不完全确定您所说的“为不同的服务器提供服务”是什么意思,您能详细说明一下吗?
    【解决方案2】:

    虽然这不是最佳做法,但您可以像这样使用 global 对象:

    global.host = host;
    

    然后在任何需要的地方使用global.host

    官方文档global object

    【讨论】:

    • 当我尝试访问主机时显示未定义
    【解决方案3】:

    您可以使用 global 对象,它是 Node 中的关键字。

    global.hostname = req.headers['host']
    

    并在应用程序的任何地方使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      • 2011-01-09
      • 2021-10-18
      • 2012-09-09
      相关资源
      最近更新 更多