2017-07-19 82 views
0

可以說我有以下文件的NodeJS:包括的NodeJS功能

var https = require("https"); 
var express = require("express"); 
var app = express(); 
var options = {}; 
var serverPort = 8443; 
var server = https.createServer(options, app); 
var io = require('socket.io')(server); 

var numUsers = 0; 

app.get('/', function(req, res){ 
    res.sendFile('/home/domain/index.php'); 
});     

io.on('connection', function(socket){ 

    socket.on('user-login', function(data){ 
     ++numUsers;    
    }); 

    socket.on('new message', function (msg,room) { 
     console.log(msg); 
    }); 

    socket.on("disconnect", function() { 
     --numUsers; 
    }); 

}); 

server.listen(serverPort, function(){ 
    console.log("\n--------------------------------"); 
    console.log('Node HTTPs Server'); 
    console.log('Currently Listening on port %d',serverPort); 
    console.log("--------------------------------"); 
}); 

既然不能在我的服務器上得到SNI to work,我會去的老式方法和編寫腳本,針對每個子域。但我想要做的是將io.on('connection', function(socket) {}區域內的功能設置爲included。所以不包括像類或類似的東西,但從字面上看,代碼只是從另一個文件中獲取並進行處理,就好像它已經在該文件中一樣。很多像PHP一樣包括在內。這可能嗎?

回答

0

簡單的解決辦法是使用fs.readFile[Sync]閱讀代碼,並把它傳遞給evalio.on('connection', function(socket) {})

io.on('connection', function(socket){ 

    socket.on('user-login', function(data){ 
     ++numUsers;    
    }); 

    socket.on('new message', function (msg,room) { 
     console.log(msg); 
    }); 

    socket.on("disconnect", function() { 
     --numUsers; 
    }); 
    // eval function loaded outside io.on('connection') 
    eval(someFunctionBody); 
    // or 
    eval(fs.readFileSync('path/to/function/body.js')); 
}); 
0

你就不能使用require

functions.js

function myFunc() { 
    console.log("I am a funky func"); 
} 

module.exports = { 
    myFunc, 
    myOtherFunc, 
}; 

index.js

var https = require("https"); 
var express = require("express"); 
// snip 
var funcs = require('./functions'); 

io.on('connection', function(socket){ 
    // snip 

    funcs.myFunc(); 
});