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

时间:2019-03-27 04:34:52

标签: node.js visual-studio-code

我正在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);

3 个答案:

答案 0 :(得分:0)

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

因此,从根本上讲,您不能在socket内使用app.post

您需要标识客户端。您可以使用具有PassportSocket.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
};