Почему нет доступа к аргументам модуля nodejs из собственных методов? - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу включить "socket.io" в мой проект nodejs.Я передал аргументы к маршрутам из app.js , как показано ниже.

app.js :

var io = require('socket.io')(server);
io.on('connection', function(socket) {
    socket.emit('clients', { event:'connected', exData1: 'A', exData2: 'B' });
    socket.on('server', function (data) {
        console.log('Received data from client: ', data);
    });
});

require('./routes/project')(router,io)

Затем я переправил егок контроллеру из маршрута.

routs / projects.js :

module.exports = (router,io) => {
    const controller = require('./../controllers/project.ctrl')(io);
    router.route('/projects/:id').get(controller.getProject)
    ...
}

Я не могу получить доступ к аргументу "io" из собственного метода.

controllers / project.ctrl.js :

module.exports = (io) => {
    var module = {};

    // console.log('IO 1: ',io) // io is accessible in here

    module.getProject = (req, res, next) => {

        console.log('IO 2: ',io) // io is undefined in here :(

        Project.findById(req.params.id).exec((err, project)=> {
            if (err) res.send(err)
            else if (!project) res.sendStatus(404)
            else {
                if (io) {
                    io.emit('clients', { event:'project_viewed' });
                    console.log('Emitted');
                } else {
                    console.log('io not found :( !!!!!')
                }
                return res.send(project)
            }
            next()
        })
    }
    ...
    return module;
}

Как получить доступ к аргументу io из метода модуля nodejs?

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