1
votes

node.js - ReferenceError: le navigateur n'est pas défini

J'obtiens ReferenceError: le navigateur n'est pas défini en exécutant le code suivant sur node.js:

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

Je suppose que le problème est que Navigator.geolocation est une API Web et ne fonctionne pas sur le nœud. Existe-t-il un moyen de se moquer du navigateur et de l'utiliser sur node.js?

Merci beaucoup


2 commentaires

Est-ce que cela répond à votre question? require (processing-js) renvoie une erreur de référence: Navigateur introuvable


Qu'essayez-vous de faire? Obtenir l'emplacement de l'ordinateur sur lequel Node.js s'exécute? Écrire des tests unitaires pour du code destiné à s'exécuter dans un navigateur (mais avec des tests exécutés via Node.js)? Autre chose?


3 Réponses :


-1
votes

Node.js est une technologie côté serveur, ce qui signifie qu'il ne peut pas accéder directement à la géolocalisation de l'utilisateur.

Ce que vous devriez demander, c'est comment obtenir la géolocalisation en utilisant javascript côté client, puis simplement envoyer ces informations à votre serveur via Ajax.

Plus d'informations ici: http://www.w3schools.com/html/html5_geolocation.asp .

Il existe bien sûr des bibliothèques qui en faciliteront l'utilisation.


0 commentaires

0
votes

Existe-t-il un moyen de se moquer du navigateur et de l'utiliser sur node.js?

Une bibliothèque utile pour se moquer des API Web est browser-env .

browserEnv(['navigator']);

Ensuite:

import browserEnv from 'browser-env';

Cela pollue l'espace de noms global, cependant, soyez prudent dans son utilisation.


0 commentaires

0
votes

J'ai donc créé cela parce que l'analyse ne prend pas en charge le nœud, elle nécessite donc une importation conditionnelle

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)
  }
}


0 commentaires