我正在Visual Studio代码中使用node.js。还是新手。
我正在尝试从一个js文件中调用带有子属性的嵌套变量,以在另一个文件中使用。如何才能做到这一点?
我已经在目标文件中引用了源文件,并且能够调用包含在console.log中返回object.object的变量的文件和方法。对变量本身或对分配给其值的对象的任何调用都将返回未定义状态。我尝试使用exports.var,但是Visual Studio代码无法识别该命令。为其值赋值的对象在源文件中确实具有初始全局声明。
工作及其孩子是我想要转移的价值。源文件中的Console.log命令不会显示预期值。
源文件:dataHandler.js
let jobArray = null;
export function getJobDetails() {
if(_jobDetails == null) {
let job, jobIndex, regIndex;
regIndex = _productTypes.indexOf("reg");
jobIndex = (regIndex > -1) ? regIndex : 0;
job = _jobsData[jobIndex].details;
jobArray = job;
}
console.log(jobArray.orderId); //returns expected value
return _jobDetails;
}
目标文件:geo.js
import * as DataHandler from './dataHandler.js';
export function createGeo() {
var site = DataHandler.jobArray.orderId;
//var site = DataHandler.getJobDetails().jobArray;
//var site = DataHandler.getJobDetails(jobArray.orderId);
答案 0 :(得分:0)
Express的app
和Socket.io彼此无关。
因此,从根本上讲,您不能在socket
内使用app.post
。
您需要标识客户端。您可以使用具有Passport的Socket.io plugin,该Could not find com.google.gms:google-services:4.1.0. Searched in the following locations:本质上将app.post
/ get
的{{1}}桥接到req.user
。
注意:不必是具有从数据库中提取用户的经过身份验证的客户端,只需一个在内存中存储了临时用户的客户端即可。像这样:
socket.request.user
然后,您可以将客户端的套接字ID附加到其用户会话中。
app.use(function(req, res, next) {
if (!req.user) { // if a user doesn't exist, create one
var id = crypto.randomBytes(10).toString('hex');
var user = { id: id };
req.logIn(user);
res.redirect(req.lastpage || '/');
return;
}
next();
});
var Users = {};
passport.serialize(function(user) {
Users[user.id] = user;
done(null, user);
});
passport.deserialize(function(id) {
var user = Users[id];
done(null, user);
});
然后使用io.on('connection', function (socket) {
socket.request.user.socketid = socket.id
});
在socket.emit
中使用io.emit
代替app.post
socketid
注意:app.post('/', function (req, res) {
io.to(req.user.socketid).emit('whatever');
});
用于发射到房间,但是默认情况下,每个套接字都连接到名为io.to()
的同一个房间,因此它将起作用。
感谢:https://stackoverflow.com/questions/28310418/nodejs-accessing-nested-variable-in-global-scope
答案 1 :(得分:0)
您没有返回“ jobArray”,请使用Promise将变量返回到您的子文件。
答案 2 :(得分:0)
执行以下操作。
const DataHandler = require('./dataHandler');
var test = DataHandler.getJobDetail();
console.log(test.orderId);
&DataHandler应该执行以下操作。这里重要的一点是我要从getJobDetails返回jobarray。
var jobArray = null;
var getJobDetail = () => {
jobArray = {
orderId: 1
};
return jobArray;
};
module.exports = {
getJobDetail
};