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

use*_*016 7 javascript node.js

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

client.js:

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

myModule.js :

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

windowVar.serverCounter = 0;
windowVar.arr1=[];
Run Code Online (Sandbox Code Playgroud)

server.js:

var m= require('./myModule');
Run Code Online (Sandbox Code Playgroud)

在node.js中运行服务器时,我收到以下错误:

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

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

T.J*_*der 17

window 是Node上不存在的浏览器.

如果您真的想要创建全局,请global改用:

global.windowVar = /*...*/; // BUT PLEASE DON'T DO THIS, keep reading
Run Code Online (Sandbox Code Playgroud)

global是Node的全局对象标识符,就像window在浏览器上一样.

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

var windowVar = /*...*/;
Run Code Online (Sandbox Code Playgroud)

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

  • 在 Node.js 中拥有窗口的原因是为了模拟期望在浏览器中运行的脚本。 (2认同)

Com*_*ode 14

我使用了这样的东西,它可以防止错误:

let foo = null;
if (typeof window !== "undefined") {
  foo = window.localStorage.getItem("foo");
}
Run Code Online (Sandbox Code Playgroud)