【问题标题】:node.js - ReferenceError: navigator is not definednode.js - ReferenceError:导航器未定义
【发布时间】:2020-02-25 16:32:23
【问题描述】:

我得到 ReferenceError: navigator is not defined 在 node.js 上运行以下代码:

navigator.geolocation.getCurrentPosition((data) => {
  console.log(data);
});

我认为问题在于 Navigator.geolocation 是一个 Web API,不能在节点上运行。有没有办法模拟浏览器并在 node.js 上使用它?

非常感谢

【问题讨论】:

标签: javascript node.js geolocation


【解决方案1】:

所以我创建了这个,因为分析不支持节点,所以它需要条件导入

import isNode from 'detect-node'
export async function analyticsLogEvents(event, params) {
  if (!isNode) {
    const firebase = await import('firebase/app')
    await import('firebase/analytics')
    firebase.default.analytics().logEvent(event, params)
  }
}

【讨论】:

  • 太棒了。非常感谢你。 isNode 条件为我解决了一个大问题:Next.js 在 Node 中初始化路由逻辑(以及稍后由浏览器运行的相同逻辑)。我在这个卡住了几个小时。真的,再次感谢。
  • @JohnCamden 没问题,由于节点和库之间的复杂性以及反应渲染,我花了大约 2 天的时间才找到我的项目中发生的事情,我很高兴它有所帮助!
【解决方案2】:

有没有办法模拟浏览器并在 node.js 上使用它?

browser-env 是一个可用于模拟 Web API 的库。

import browserEnv from 'browser-env';

然后:

browserEnv(['navigator']);

不过,这会污染全局命名空间,因此请谨慎使用。

【讨论】:

    【解决方案3】:

    Node.js 是一种服务器端技术,这意味着它不能直接访问用户的地理位置。

    您应该问的是如何在客户端使用 javascript 获取地理位置,然后简单地通过 Ajax 将该信息发送到您的服务器。

    更多信息在这里:http://www.w3schools.com/html/html5_geolocation.asp

    当然有一些库可以方便地使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      相关资源
      最近更新 更多