简单的node.js服务器不会错误处理失败的请求

克里斯蒂娜·库姆(Christina Koum)

我用以下代码设置了一个简单的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;

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

server.listen(8001);

连接到localhost:8001可以正常工作。

但是,当我尝试连接到localhost:8001 / socket.html时,服务器崩溃,终端显示以下错误:

events.js:141 throw er; //未处理的“错误”事件^

错误:写在FSReqWrap.readFileAfterClose处/Users/Nikos/Desktop/hack_reactor/server.js:24:34处的ServerResponse.OutgoingMessage.write(_http_outgoing.js:428:15)结束时[不完整](fs.js: 380:3)

调试时,console.log(error)返回null。请解释为什么会这样。

模具

您的代码中的问题是fs.readFile是异步函数,因此response.end在response.write之前运行。在response.end之后,连接被关闭,您不能再写了。解决方案很简单。完成编写后,只需调用response.end即可。

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');
            response.end();
            break;
        case '/socket.html':
            fs.readFile(__dirname + path, function(error, data){
                console.log(path);
                console.log(error);
                if (error){
                    response.writeHead(404);
                    response.write("opps this doesn't exist - 404");
                    response.end();
                }
                else{
                    response.writeHead(200, {"Content-Type": "text/html"});
                    response.write(data, "utf8");
                    response.end();
                }
            });
            break;
        default:
            response.writeHead(404);
            response.write("opps this doesn't exist - 404");
            response.end();
            break;
    }
});

server.listen(8001);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

简单的node.js服务器发送html + css作为响应

来自分类Dev

简单的Node.js Web服务器始终发送文本/纯CSS和JS文件

来自分类Dev

node.js简单的Web服务器请求生命周期

来自分类Dev

如何从node.js服务器获得简单响应?

来自分类Dev

没有Express的简单Node.js服务器-用HTML文件响应

来自分类Dev

在Node.js中实现服务器发送事件的简单方法?

来自分类Dev

在Amazon EC2上运行简单的HTTPS Node JS服务器

来自分类Dev

Node.js,简单的TLS客户端/服务器

来自分类Dev

在同一网络上不同设备上预览Angular应用时,如何向Node.js服务器发出请求不会失败?

来自分类Dev

简单的无框架Node.JS服务器托管SPA React App

来自分类Dev

如何修复对Node.js服务器的提取请求?

来自分类Dev

为什么Node.js简单的HTTP服务器应用程序无法在服务器上运行?

来自分类Dev

向简单节点js Web服务器的请求

来自分类Dev

node.js Web服务器不会重新加载

来自分类Dev

Node.js服务器通过Upstart静默失败

来自分类Dev

用Express在Node JS中进行简单的错误处理?

来自分类Dev

客户端javascript与服务器node.js通信的简单方法

来自分类Dev

简单的node.js服务器,用于中继GPS坐标

来自分类Dev

Node.js服务器如何处理请求?

来自分类Dev

如何从node.js服务器获得简单响应?

来自分类Dev

离子服务和Node.js简单的Web服务器无法绕过Chrome地理位置阻止

来自分类Dev

方法client.write()在简单的服务器Node.js上不起作用,

来自分类Dev

node.js服务器重新启动基础知识错误处理

来自分类Dev

创建一个简单的 node.js 静态服务器

来自分类Dev

使用 node js 创建简单的服务器(自定义协议)

来自分类Dev

使用 Kotlin 创建简单的 Node 服务器

来自分类Dev

请求到达 node js 服务器时的执行流程

来自分类Dev

节点js错误处理它使服务器崩溃

来自分类Dev

错误 - 简单的加密和解密 - Node.js

Related 相关文章

  1. 1

    简单的node.js服务器发送html + css作为响应

  2. 2

    简单的Node.js Web服务器始终发送文本/纯CSS和JS文件

  3. 3

    node.js简单的Web服务器请求生命周期

  4. 4

    如何从node.js服务器获得简单响应?

  5. 5

    没有Express的简单Node.js服务器-用HTML文件响应

  6. 6

    在Node.js中实现服务器发送事件的简单方法?

  7. 7

    在Amazon EC2上运行简单的HTTPS Node JS服务器

  8. 8

    Node.js,简单的TLS客户端/服务器

  9. 9

    在同一网络上不同设备上预览Angular应用时,如何向Node.js服务器发出请求不会失败?

  10. 10

    简单的无框架Node.JS服务器托管SPA React App

  11. 11

    如何修复对Node.js服务器的提取请求?

  12. 12

    为什么Node.js简单的HTTP服务器应用程序无法在服务器上运行?

  13. 13

    向简单节点js Web服务器的请求

  14. 14

    node.js Web服务器不会重新加载

  15. 15

    Node.js服务器通过Upstart静默失败

  16. 16

    用Express在Node JS中进行简单的错误处理?

  17. 17

    客户端javascript与服务器node.js通信的简单方法

  18. 18

    简单的node.js服务器,用于中继GPS坐标

  19. 19

    Node.js服务器如何处理请求?

  20. 20

    如何从node.js服务器获得简单响应?

  21. 21

    离子服务和Node.js简单的Web服务器无法绕过Chrome地理位置阻止

  22. 22

    方法client.write()在简单的服务器Node.js上不起作用,

  23. 23

    node.js服务器重新启动基础知识错误处理

  24. 24

    创建一个简单的 node.js 静态服务器

  25. 25

    使用 node js 创建简单的服务器(自定义协议)

  26. 26

    使用 Kotlin 创建简单的 Node 服务器

  27. 27

    请求到达 node js 服务器时的执行流程

  28. 28

    节点js错误处理它使服务器崩溃

  29. 29

    错误 - 简单的加密和解密 - Node.js

热门标签

归档