ReferenceError:窗口未在object处定义。 <anonymous> Node.js

时间:2017-08-30 15:19:11

标签: javascript node.js

我在这里看过类似的问题,但没有一个符合我的情况。在我的网络中,我有3个JavaScript个文件:client.jsserver.jsmyModule.js。在client.js中,我创建了一个名为windowVar的窗口变量,并添加了一些属性。在myModule.js中,我添加了一些其他属性并在那里使用它们并导出文件并在server.js中要求它。

client.js

window.windowVar= {
    func1: function(args) {    
       //some sode here
    },
    counter:0
};

myModule.js

module.exports={wVar:windowVar, addMessage ,getMessages, deleteMessage};

windowVar.serverCounter = 0;
windowVar.arr1=[];

server.js

var m= require('./myModule');

在node.js中运行服务器时出现以下错误:

  

ReferenceError:窗口未在object处定义。 <anonymous>

据我所知,window是一个浏览器属性,但在这种情况下如何解决错误?任何帮助表示赞赏

6 个答案:

答案 0 :(得分:14)

window是一个在Node上不存在的浏览器。

如果您确实要创建全局,请改用global

global.windowVar = /*...*/; // BUT PLEASE DON'T DO THIS, keep reading

global是节点的全局对象标识符,如window在浏览器上。

但是 ,没有必要在Node程序中创建真正的全局变量。相反,只需创建一个全局模块:

var windowVar = /*...*/;

...并且由于您将其包含在exports中,因此其他模块可以根据需要访问它所引用的对象。

答案 1 :(得分:10)

我使用了类似的方法,它可以防止错误发生:

  let foo = null;
  if (typeof window !== "undefined") {
    foo = window.localStorage.getItem("foo");
  }

答案 2 :(得分:1)

window对象仅出现在浏览器的上下文中。在nodejs上运行应用程序时,没有window对象可用。如果您想跨多个文件共享变量或函数,则必须使用requireexports

client.js

module.exports = {
    fun1: function(){

    },
    counter: 0 
}

和myModule.js中的类似内容

var client = require('./client');

答案 3 :(得分:0)

对于node.js,主窗口对象称为gloabal。像这样使用它:

let users  = YOUR_JSON_LIST;
let idUser = users.find(u => u.username == SOME_USERNAME).id;

答案 4 :(得分:0)

有时,当您使用自定义项目时,根本不需要“窗口”对象,只需在所有其他内容之前将其定义为空白即可:

window = {};

答案 5 :(得分:-1)

这可能不是您面临的问题,但在 VScode 终端中使用 node 运行 javascript 文件时,有时我会在 vscode 中遇到相同的错误。

以下处理它-

sudo apt install nodejs
npm init

由于某种原因,VSCode 找不到 nodejs 文件的路径