【问题标题】:Node.js HTTP WebServer Write after End errorNode.js HTTP WebServer 结束后写入错误
【发布时间】:2015-07-18 17:45:44
【问题描述】:

我是 node.js 的新手,我一直在尝试设置一个基本的服务器。

我正在运行下面的代码,但出现“结束后写入”错误。

Socket.html 是一个基本的 html 文件,正文中有一个 hello world 字符串。该文件中实际上没有其他内容。我曾尝试使用“ReadFileSync”方法,但会引发一系列我不完全理解的全新错误。

我将不胜感激这方面的任何帮助。我是新手,所以请放轻松一点:)提前谢谢!

我已经验证了路径是正确的,并且缓冲区确实有数据。

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.substr(1);
path = "\\" + path;

switch(path){
    case '/':
        response.writeHead(200, {'Content-Type': 'text/html'});
        response.write('hello world');
        break;
    case '\\socket.html':
        //console.log(path);
        fs.readFile(__dirname + path, function(error, data){
            if(error){
                response.writeHead(404);
                response.write("This domain is missing");
            }
            else{
                console.log(data);
                response.writeHead(200, {"Content-Type": "text/html"});
                response.write(data,"utf8");
            }
        });
        break;
    default:
        response.writeHead(404);
        response.write("This domain is missing");
        break;
}

response.end();
});

server.listen(8001);

【问题讨论】:

    标签: javascript node.js sockets websocket socket.io


    【解决方案1】:

    我认为当您从 FileSystem 异步读取时,response.end() 方法会在 response.write() 之前调用,我建议改用以下代码:

    var http = require('http'); 
    var url = require('url'); 
    var fs = require('fs'); 
    var server = http.createServer(function(request, response) {
        var path = url.parse(request.url).pathname.substr(1);
        path = "\\" + path; 
        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) { 
                    if(error) {
                        response.writeHead(404); 
                        response.write("This domain is missing"); 
                    } else {
                        response.writeHead(200, {"Content-Type": "text/html"});
                        response.write(data, "utf8"); 
                    } 
                    response.end();
                }); 
            break; 
            default: 
                response.writeHead(404); 
                response.write("This domain is missing"); 
                response.end();
            break;
        } 
    });
    

    【讨论】:

    • 谢谢卢卡!这解决了我遇到的问题!我感觉它与异步 Fs.read 相关,但由于我是新手,我不知道如何处理它。
    • 很高兴能帮到你:)
    • 嘿@Luca!我遇到了另一个节点问题。我正在学习绳索,但我不完全确定为什么会出现一些错误。我在stackoverflow.com/questions/31506271/… 上发布了一个新问题,您可以看看并帮助我吗?提前致谢!
    猜你喜欢
    • 2019-12-17
    • 2017-01-08
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多