使用其他文件中的嵌套变量

问题描述 投票:0回答:3

我正在使用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);
node.js visual-studio-code
3个回答
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
};

0
投票

Express的app和Socket.io彼此无关。

所以从根本上说,你不能在socket中使用app.post

您需要识别客户端。你可以使用Passport,它有一个Socket.io plugin,基本上将app.post / getreq.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.emitapp.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


0
投票

您没有返回“jobArray”,使用Promise将变量返回到您的子文件。

© www.soinside.com 2019 - 2024. All rights reserved.