我在这里看过类似的问题,但没有一个符合我的情况。在我的网络中,我有3个JavaScript
个文件:client.js
,server.js
,myModule.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是一个浏览器属性,但在这种情况下如何解决错误?任何帮助表示赞赏
答案 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
对象可用。如果您想跨多个文件共享变量或函数,则必须使用require
和exports
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 文件的路径