刚开始玩节点,并且在路由方面遇到一点麻烦,我查看了路由分离示例,但认为这对我的技能有点提升,所以我做了以下方式,有人建议以下代码
的index.html
<div class="container" id="test-container">
<h1>Test</h1>
<span id="test-error"></span>
<form id="test-input2">
<input type="text" id="test"></input>
</form>
</div>
ui.js
$('#test-input').submit(function(e){
e.preventDefault();
socket.emit('route', null);
});
ui_backend.js
exports.listen = function(server){
io = socketio.listen(server);
io.set('log level', 2);
io.sockets.on('connection', function(socket){
route_testing(socket);
});
}
function route_testing(socket){
socket.on('route', function(req, res){
res.render('test', function(err, html){
});
})
}
server.js
app.get('/test', function(req, res){
res.sendfile(__dirname + '/views/test.html');
});
编辑:
问题在于我无法使路由工作。
答案 0 :(得分:0)
建议:
您在server.js
app.get("/test", routes.page("test"));
在ui_backend.js
module.exports = function (view) {
return function (req, res) {
res.render(view + ".html", {
page: view
});
};
};
做res.render()
就好了。 sendfile不是你想要的。
答案 1 :(得分:0)
function route_testing(socket){
socket.on('route', function(req, res){
res.render('test', function(err, html){
});
})
}
使用socket.on(message,callback)
,没有req,res参数。你正在混合express和socket.io api。
在套接字消息上,您需要发出另一个套接字消息。 socket.emit(message)
socket.on('route', function(data){
socket.emit(message,somedata);
})
这里你基本上有一个服务器有2个不同的协议,websockets和经典的http。 socket.io api很清楚:http://socket.io/你不能组成一个不同的api并期望它能够工作。
app.get('/test', function(req, res){
res.sendfile(__dirname + '/views/test.html');
});
将/views/test.html作为附件发送。你不想这样做,你想快递渲染一些html模板或页面:
app.get('/test', function(req, res){
res.render('test');
});
应该使用默认的快速脚本开箱即用。
因此,当您想通过http查询时,请使用express api。
当您想通过websockets发送消息时,请使用socket.io api。