“0”的执行顺序是什么;开关箱”;在节点js中
what is the executing sequence of "switch case" in node js
我是node.js的新手,在运行一个简单的示例时遇到了一个奇怪的问题。
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;
console.log(1);
switch(path){
case '/':
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('hello world');
break;
case '/socket.html':
console.log(2);
fs.readFile(__dirname + path, function(error, data){
if (error){
response.writeHead(404);
response.write("opps this doesn't exist - 404");
console.log(3);
}
else{
response.writeHead(200, {"Content-Type": "text/html"});
response.write(data, "utf8");
console.log(4);
}
});
break;
default:
response.writeHead(404);
response.write("opps this doesn't exist - 404");
break;
}
console.log(5);
response.end();
});
server.listen(8001);
当我访问时
http://localhost:8001/socket.html
后端日志输出如下:
Connection
1
2
5
4
Connection
1
5
在浏览器中,没有输出,html的源为空。注意日志,我想这可能是在日志打印"5"之后,日志打印"4"之前,响应已经关闭。
我不明白为什么日志序列不是"1245",有人能解释一下吗?
fs.readFile
方法是异步。当您调用它时,执行会在它之后立即继续(在break
语句中),然后继续到console.log(5)
,然后response.end()
调用。
因此,在fs.readFile
回调获得执行机会之前,response.end()
被调用。您需要将response.end()
调用移动到回调中。
相关文章:
- 在运行时启动jquery-ui.toggleSwitch.js切换开关
- 开关按钮淘汰js
- 尝试从开关语句 -JS- 中的函数返回值
- 箱线图和柱形图与Highcharts.js组合在一个图表中
- 如何在一个页面中使用多个 css 切换开关与 js 或 jquery
- 如何在 Angular JS 中执行开关或 else/if 语句
- 将数字 ID 从 html 保管箱传递给 JS 函数
- 无法使用PHP和Angular.js在电子邮件收件箱中获取电子邮件
- 开关箱不工作-找不到值
- 使用一个md开关来切换HTML/JS中的一组其他md开关
- 带返回和断开的开关箱
- 在开关箱里放一个开关箱是不是不好的做法
- 如何检测开关箱的空输入值
- “0”的执行顺序是什么;开关箱”;在节点js中
- 选择带开关箱的选项计算
- 开关箱:多个开关箱不工作在我的页面
- 用更好的东西替换开关箱
- 简单的开关箱不工作
- 是否可以在一个开关箱中有多个开关箱
- 基于标志条件的开关箱