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”
ReferenceError:TextEncoder 没有用猫鼬定义 Node.js
Node.js 和 JQuery:“ReferenceError:$ 未定义”错误。如何在服务器上将 jquery 与节点一起使用?
解决 Node.js 中的“Uncaught ReferenceError: require is not defined”错误