所以,下面是我的server.js文件中的代碼片段。運行時,我發送帶有消息的URL,res.end()會使視圖呈現空白頁面。在節點服務器中使用res.end()時遇到問題
當我註釋掉res.end()命令時,視圖會顯示所有消息,但瀏覽器會等待並等待來自服務器的響應已完成的信號。
我得到,你可以使用res.end()並把數據放在parens,由視圖傳輸和呈現。
我希望發生的事情是,沒有參數,它只會離開視圖,但是參數中的空參數顯示爲空視圖。
如何在不刪除視圖上的數據的情況下指出響應已完成?
server.js
var http = require('http'),
url = require('url'),
fs = require('fs');
var messages = ["testing"];
var clients = [];
http.createServer(function(req,res) {
var url_parts = url.parse(req.url);
console.log(url_parts);
if(url_parts.pathname == '/') {
// file serving
fs.readFile('./index.html', function(err, data) {
// console.log(data);
res.end(data);
});
} else if(url_parts.pathname.substr(0,5) == '/poll'){
//polling code
var count = url_parts.pathname.replace(/[^0-9]*/,'');
console.log(count);
if(messages.length > count){
res.end(JSON.stringify({
count: messages.length,
append: messages.slice(count).join("\n")+"\n"
}));
} else {
clients.push(res);
}
} else if(url_parts.pathname.substr(0, 5) == '/msg/') {
// message receiving
var msg = unescape(url_parts.pathname.substr(5));
messages.push(msg);
while(clients.length > 0) {
var client = clients.pop();
client.end(JSON.stringify({
count: messages.length,
append: msg+"\n"
}));
}
// res.end(); //if left in, this renders an empty page, if removed,
// client keeps waiting....
}
}).listen(8080, 'localhost');
console.log('server running!');
的index.html
<html>
<head>
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script>
var counter = 0;
var poll = function() {
$.getJSON('/poll/'+counter, function(response) {
counter = response.count;
var elem = $('#output');
elem.text(elem.text() + response.append);
//elem.text(counter);
poll();
});
}
poll();
</script>
</head>
<body>
<textarea id="output" style="width: 90%; height: 90%;">
</textarea>
</body>
</html>
我看過的文檔,但我沒有看到具體的關於使用.END()方法用空參數傳遞給什麼表示並結束而不傳遞要呈現的數據。我用google搜索了這個,但我還沒有答案。
你能發佈完整的工作代碼嗎? –
'當我註釋掉res.end()命令時,視圖顯示所有消息',你是怎麼做到的?你的代碼沒有顯示任何'client.end()' – shaochuancs
@ abhyudit-jain的邏輯,server.js文件的完整工作代碼現已發佈在上面,在此先感謝您的想法 –