Использовать вложенную переменную из другого файла - PullRequest
0 голосов
/ 27 марта 2019

Я работаю с node.js в коде Visual Studio. Все еще новичок в обоих.

Я пытаюсь вызвать вложенную переменную с дочерними свойствами из одного файла js для использования в другом файле. Как это может быть сделано?

Я уже ссылался на исходный файл в моем целевом файле, и я могу вызвать файл и метод, содержащий переменную, которая возвращает object.object в console.log. Любые вызовы самой переменной или объекта, которому присвоено ее значение, возвращаются неопределенными. Я пытался использовать export.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 голосов
/ 27 марта 2019

Вы не возвращаете "jobArray", используйте Promise, чтобы вернуть переменную в ваш дочерний файл.

0 голосов
/ 27 марта 2019

Сделайте что-то вроде следующего.

const DataHandler = require('./dataHandler');
var test = DataHandler.getJobDetail();
console.log(test.orderId);

& DataHandler должен сделать что-то вроде следующего. Здесь важным моментом является то, что я возвращаю Jobarray из getJobDetails.

var jobArray = null;

var getJobDetail = () => {
    jobArray = {
        orderId: 1
    };
    return jobArray;
};

module.exports = {
    getJobDetail
};
0 голосов
/ 27 марта 2019

Express's app и Socket.io не имеют ничего общего друг с другом.

Так что принципиально, вы не можете использовать socket внутри app.post.

Вам необходимо идентифицировать клиента. Вы можете использовать Паспорт , который имеет Плагин Socket.io , который по существу соединяет 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);
});

Затем вы можете прикрепить идентификатор сокета клиента к его сеансу пользователя.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...