我正在使用visual studio代码中的node.js。两者都还是新的。
我试图从一个js文件中调用带有子属性的嵌套变量,以便在另一个文件中使用。如何才能做到这一点?
我已经在目标文件中引用了源文件,并且我能够调用包含在console.log中返回object.object的变量的文件和方法。对变量本身或分配给其值的对象的任何调用都将返回undefined。我尝试使用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);
做以下事情。
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
};
Express的app
和Socket.io彼此无关。
所以从根本上说,你不能在socket
中使用app.post
。
您需要识别客户端。你可以使用Passport,它有一个Socket.io plugin,基本上将app.post
/ get
的req.user
桥接到socket.request.user
。
注意:它不必是经过身份验证的客户端,其用户是从数据库中获取的,只有具有存储在内存中的临时用户的客户端才会这样做。像这样的东西:
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);
});
然后,您可以将客户端的套接字ID附加到其用户会话。
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()
用于向房间发射,但默认情况下每个套接字都连接到名为socket.id
的同一个房间,因此它可以工作。
谢谢:https://stackoverflow.com/questions/28310418/nodejs-accessing-nested-variable-in-global-scope
您没有返回“jobArray”,使用Promise将变量返回到您的子文件。