gpt4 book ai didi

javascript switch/case 在读取文件之前中断

转载 作者:行者123 更新时间:2023-11-28 01:42:34 24 4
gpt4 key购买 nike

我正在编写一个带有 socket.io 实现的简单 node.js 服务器。当我转到 mylocalip:8005/socket.html 时,“socket_break”会在控制台中的“socket_data”之前打印出来。所以我在浏览器中看到的是空白页面而不是 socket.html 的内容。

var http = require("http");
var url = require('url');
var fs = require('fs');

var server = http.createServer(function(request, response){
console.log('Connection');
var path = url.parse(request.url).pathname;

switch(path){
case '/':
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('hello world');
break;
case '/socket.html':
fs.readFile('./socket.html', function(error, data){
if (error){
response.writeHead(404);
response.write("opps this doesn't exist - 404");
console.log('socket_error');
}
else{
response.writeHead(200, {"Content-Type": "text/html"});
response.write(data, "utf8");
console.log('socket_data');

}
});
console.log('socket_break');
break;
default:
response.writeHead(404);
response.write("opps this doesn't exist - 404");
break;
}
response.end();
});

server.listen(8005);

如何在读取文件之前防止切换/大小写中断并使浏览器显示我的 socket.html 文件的内容?

最佳答案

我会远离在 node.js 中做同步的事情,因为当你阻塞时,你会暂停所有发出请求的人。相反,将您的路线从错误处理中抽象出来。显然,关于你想如何做到这一点存在一些架构争论,但我就是这样做的,以便快速解决它:)

var http = require("http");
var url = require('url');
var fs = require('fs');

// Perhaps include this via a require('httpExceptionHandler')
function httpExceptionHandler(req, res) {
return {
404: function() {
res.statusCode = 404;
res.end("opps this doesn't exist - 404");
},

500: function(error) {
res.statusCode = 500;
res.end("internal server error");
}
}
}


// Perhaps include this via a require('routes')
var routes = {
'/': function(server) {
var res = server.response;
res.setHeader('Content-Type', 'text/plain');
res.end('hello world');
},

'/socket.html': function(server) {
var fileStream = fs.createReadStream('socket.html');
fileStream.on('error', server.httpExceptionHandler['500']);
fileStream.pipe(server.response);
}
};


var server = http.createServer(function(request, response){
var path = url.parse(request.url).pathname;
var routeFn = routes[path];

var server = {
httpExceptionHandler: httpExceptionHandler(request, response),
request: request,
response: response
};

if (routeFn) {
// Set some default headers
response.statusCode = 200;
response.setHeader('Content-Type', 'text/html');

// A better design might be to return an action like
// Redirect, Exception, etc... not sure
routeFn(server);
} else {
server.httpExceptionHandler['404']();
}
});

server.listen(8005);

在我们完全完成之前,我们不会结束response,这使得上面的代码能够正常运行。

关于javascript switch/case 在读取文件之前中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25027166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com