我正在构建一个NodeJS游戏引擎。当用户创建引擎实例时,他们必须将现有的http服务器传递给它。然后,引擎附加一个套接字服务器,用于更新客户端视图。
我想要做的是在一个特殊网址上提供单个JavaScript文件,该网格连接客户端并允许引擎设置自己的套接字,并为网页提供视口和控制绑定API。
有没有向现有的http服务器添加请求处理程序,该服务器可以根据网址提供单个javascript?
我试过这个
function bindCoreFileServe(httpServer) {
//create a server
httpServer.on('request', function(req, res) {
//check the url
if(req.url === '/SliverJet.js') {
//send the datafunction (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}
});
}
但它崩溃了节点,因为现有服务器也尝试发送自己的标头。
感谢。
答案 0 :(得分:1)
我通过socket.io的来源想出来了。基本上我从httpServer分离所有事件监听器并将它们存储在一个数组中,然后我将自己的监听器绑定到它。如果url不属于我,我使用其调用方法执行所有分离的事件侦听器,并将httpServer作为范围传递。
答案 1 :(得分:0)
我认为你不能实现这一点(在httpServer上附加2个请求处理程序),但我建议你采用不同的方法。
例如,将所有这些URL存储到数据库中并使用通配符检查它们,如此(这是针对Express,但你明白了):
app.get('/:db_url', function(req, res) {
get_url_from_database(req.params.db_url, function (url, error) {
if (error) { throw error; }
else {
// do things
}
});
});
答案 2 :(得分:0)
对我有用的解决方案如下:
function bindFileCoreServer (httpServer) {
httpServer.addListener('request', function (req, res) {
if (req.url === '/SliverJet.js') {
res.writeHead(200, {'Content-Type': 'text/javascript'});
res.end('//Hello world!');
}
});
};
这比存储请求侦听器,替换它们,然后在需要时在循环中调用它们要简单得多。