2017-12-07 10 views
0

Express-Generator를 사용하여 응용 프로그램 뼈대를 만들었으며 서버와 경로를 만드는 파일이 분리되어 있으므로 socket.io 코드를 어디에서 설정해야할지 모르겠습니다. 튜토리얼은 대개 서버 코드, socket.io 코드 및 경로를 1 파일에 포함합니다.내가 익스프레스를 사용하고 있다고 가정 할 때, 어떤 파일에 Socket.io를 구성해야합니까?

app.js가 포함

var routes = require('./routes/'); 
var express = require('express'); 
var path = require('path'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var expressSession = require('express-session'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 

// uncomment after placing your favicon in /public 
//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(expressSession({ 
        secret: 'secretText', 
        saveUninitialized: true, 
        resave: true 
       })) 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes.home); 

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

// error handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 

module.exports = app; 

WWW가 포함

var express = require('express'); 
var router = express.Router(); 
var db = require('../helpers/db'); 

router.get('/', function(req, res, next) { 
    res.send("Hello"); 
}); 

module.exports = router; 

하는 index.js를

#!/usr/bin/env node 

/** 
* Module dependencies. 
*/ 

var app = require('../app'); 
var debug = require('debug')('myapp:server'); 
var http = require('http'); 

/** 
* Get port from environment and store in Express. 
*/ 

var port = normalizePort(process.env.PORT || '8087'); 
app.set('port', port); 

/** 
* Create HTTP server. 
*/ 

var server = http.createServer(app); 

/** 
* Listen on provided port, on all network interfaces. 
*/ 

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

/** 
* Normalize a port into a number, string, or false. 
*/ 

function normalizePort(val) { 
    var port = parseInt(val, 10); 

    if (isNaN(port)) { 
    // named pipe 
    return val; 
    } 

    if (port >= 0) { 
    // port number 
    return port; 
    } 

    return false; 
} 

/** 
* 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); 
} 

home.js

var home = require('./home'); 

module.exports = { 
    home 
}; 

답변

1

node.js의 모든 모듈 디자인 및 레이아웃과 마찬가지로 "올바른"대답이 없습니다. 그것은 당신 자신의 설계 아이디어, 다른 유형의 코드, 코드가 무엇과 함께 공유해야하는지 등에 달려 있습니다. 따라서 몇 가지 아이디어를 제공 할 수 있으며 어떤 아이디어가 당신에게 호소력있게 느껴지는지 선택할 수 있습니다. 서버 측 socket.io 코드가 상당히 최소한의 경우 (당신이 거기 서버 개체에 액세스해야하기 때문에)

  1. 는, 서버가 초기화 WWW에 포함 바로 할 수 있습니다.

  2. 서버 측 socket.io 코드를 자체 모듈에 넣으려면 자체 모듈/파일에 넣고 app.js를 가져 오는 것과 같은 방법으로 www 파일에 가져올 수 있습니다. app 개체를 서버에 연결합니다. 마찬가지로 socket.io 인스턴스를 socket.io 모듈에 만든 다음 해당 인스턴스를 www로 가져 와서 서버에 연결합니다.

  3. socket.io 코드와 app.js 코드간에 많은 코드 공유가 있거나 app.js 경로에서 socket.io 호출을해야하는 경우 socket.io를 가져올 수 있습니다. 코드를 app.js 코드에 입력 한 다음 012.apps에서 appsocket.io 인스턴스를 모두 내 보내면 www가 둘 다 연결합니다.