@LemanRass09

Как правильно строить иерархию подключений модулей в node.js?

Здравствуйте.
У меня проблемы с пониманием правильного подключения модулей и распределение кода по файлам.
Работаю в WebStorm и пока у меня есть простенький http сервер с использованием express и socket.io.
Судя по той информации что мне самому удалось найти в интернете - должен быть основной запускаемый скрипт, в папке routes должны быть js скрипты по одному на каждую страницу которая будет отображаться в браузере, в папке views должны быть шаблоны так же по одному на каждую страницу и в папке public должны быть те вещи которые предназначены для клиента вроде css стилей и клиентских js скриптов.

Мой основной скрипт выглядит так:
var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app);
var path = require('path');
var debug = require('debug')('skinsgrow:server');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var steam = require('steam-login');
var io = require('socket.io').listen(server);


server.listen(3000);
server.on('error', onError);
server.on('listening', onListening);


var index = require('./routes/index');
var roulette = require('./routes/roulette');


app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(require('express-session')({ 'resave': false, 'saveUninitialized': false, 'secret': 'a secret' }));
app.use(steam.middleware({
    realm: 'http://localhost:3000/',
    verify: 'http://localhost:3000/verify',
    apiKey: '*****************************'
}));

app.use('/', index);
app.use('/roulette', roulette);


app.use('/auth', steam.authenticate(), function (req, res) {
    res.redirect('/roulette');
});
app.use('/verify', steam.verify(), function (req, res) {
    res.redirect('/roulette');
});

app.use('/logout', steam.enforceLogin(), function(req, res){
    res.redirect('/');
});


// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(new Error(404, 'Not Found'));
});

// error handler
app.use(function(err, req, res, next) {
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
  res.status(err.status || 500);
  res.render('error');
});


/**
 * Event listener for HTTP server "error" event.
 */
function onError(error) {
    if (error.syscall !== 'listen') {
        throw error;
    }

    var bind = typeof port === 'string'
        ? 'Pipe ' + port
        : 'Port ' + port;

    // handle specific listen errors with friendly messages
    switch (error.code) {
        case 'EACCES':
            console.error(bind + ' requires elevated privileges');
            process.exit(1);
            break;
        case 'EADDRINUSE':
            console.error(bind + ' is already in use');
            process.exit(1);
            break;
        default:
            throw error;
    }
}

/**
 * Event listener for HTTP server "listening" event.
 */
function onListening() {
    var addr = server.address();
    var bind = typeof addr === 'string'
        ? 'pipe ' + addr
        : 'port ' + addr.port;
    debug('Listening on ' + bind);
}

module.exports = app;


Предположим мне понадобилось использовать к примеру socket.io пакет который определен в главном скрипте app.js из одного из дополнительных js файлов из папки routes.
Разве не будет считаться плохим тоном подключать главный (запускаемый) скрипт во все дополнительные?
Если будет, тогда как делать правильно?
  • Вопрос задан
  • 250 просмотров
Решения вопроса 1
yarkov
@yarkov
Помог ответ? Отметь решением.
// modulewithio.js
module.exports = function(io) {
/* use main io object */
}

var io = require('socket.io').listen(server);
var modulewithio = require('modulewithio')(io);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы