node.js - ReferenceError:导航器未定义

Posted

技术标签:

【中文标题】node.js - ReferenceError:导航器未定义【英文标题】:node.js - ReferenceError: navigator is not defined 【发布时间】: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 上使用它?

非常感谢

【问题讨论】:

这能回答你的问题吗? require(processing-js) throws Reference Error: Navigator not Found 你想做什么?获取运行 Node.js 的计算机的位置?为打算在浏览器中运行的代码编写单元测试(但测试通过 Node.js 运行)?还有什么? 【参考方案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。

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

【讨论】:

以上是关于node.js - ReferenceError:导航器未定义的主要内容,如果未能解决你的问题,请参考以下文章

第一次使用 node.js - “ReferenceError: node is not defined”

node.js ReferenceError:服务器未定义

ReferenceError:TextEncoder 没有用猫鼬定义 Node.js

ReferenceError:变量未定义-Node.js

Node.js 和 JQuery:“ReferenceError:$ 未定义”错误。如何在服务器上将 jquery 与节点一起使用?

解决 Node.js 中的“Uncaught ReferenceError: require is not defined”错误