我正在研究 node.js。我有两台服务器,一台用于我自己的基于节点的应用程序,一台用于基于 VOIP linphone web 节点的应用程序。我想合并两台服务器并希望在同一个端口上运行,但有一些问题我自己的应用程序服务器需要“HTTP”,但 linphone 服务器需要“express”库。
我自己的应用程序节点服务器代码
var http = require("http");
var fs = require("fs");
var path = require("path");
var url = require("url");
var mimeTypes = {
"html": "text/html",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"png": "image/png",
"js": "text/javascript",
"css": "text/css"
};
var server = http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname;
//uri = "www/" + uri;
if (uri.charAt(uri.length - 1) == "/") {
uri += "index.html";
}
if (uri.indexOf("..") != -1) {
response.writeHead(403);
response.end();
}
var filename = path.join(process.cwd(), uri);
console.log("\tAttempting to serve: " + filename);
fs.exists(filename, function(exists) {
if (!exists) {
console.log("File not found: " + filename);
response.writeHead(404);
response.end("Sorry, the file you requested was not found. Don't let it ruin your day! :)");
return;
}
var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
response.writeHead(200, {'Content-Type': mimeType});
var fileStream = fs.createReadStream(filename);
fileStream.pipe(response);
});
}).listen(process.env.PORT || 8080);
console.log('listening on ' + (process.env.PORT || 8080));
Linphone Web App 节点服务器文件代码
var express = require('express');
var commander = require('commander');
var https = require('https');
var http = require('http');
var fs = require('fs');
var crypto = require('crypto');
var app = express();
commander
.version('0.0.1')
.option('-d, --debug', 'Debug env')
.option('-p, --port <n>', 'HTTP port', parseInt)
.parse(process.argv);
app.set('port', commander.port ? commander.port : 8888);
app.set('env', commander.debug ? 'debug' : 'release');
app.set('tmp', __dirname + '/tmp/');
app.set('public', __dirname + '/core/');
app.set('tmp', app.get('public') + '/tmp/');
app.set('expires', (app.get('env') === 'debug') ? 0 : 60 * 60 * 24 * 14 * 1000);
app.configure(function() {
app.use(express.compress());
app.use(express.bodyParser());
app.use(express.static(app.get('public'), {maxAge: app.get('expires')}));
});
fs.mkdir(app.get('tmp'), 0777, function(err) {
});
function my_random() {
var current_date = (new Date()).valueOf().toString();
var random = Math.random().toString();
return crypto.createHash('sha1').update(current_date + random).digest('hex');
}
app.post('/upload', function(req, res, next) {
data = req.body.data.replace(/ /g, '+');
filename = app.get('tmp') + "/" + my_random();
console.log("Upload(" + req.body.filename + ", " + data.length + "): " + filename);
fs.writeFile(filename, data, 'base64', function(err) {
if (err) {
res.writeHead(500, {'Content-Type': 'text/plain'});
res.end('Forbidden \n');
console.log(err);
} else {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Ok \n');
console.log("The file \"" + filename + "\" was saved!");
}
});
});
module.exports = app.listen(app.get('port'), function() {
console.log('Express server listening on port ' + app.get('port') + ' env ' + app.get('env'));
});