【问题标题】:I'm getting a fs.js:347 throw new TypeError('Bad arguments');我得到一个 fs.js:347 throw new TypeError('Bad arguments');
【发布时间】:2015-07-19 12:53:09
【问题描述】:

我正在尝试遵循有关使用 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.readFileSync(__dirname + path, function(error, data){
                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);

当我访问 http://localhost:8001/socket.html 时,我的浏览器中出现一个空白屏幕,我的终端显示

Connection
fs.js:347
throw new TypeError('Bad arguments');
      ^
TypeError: Bad arguments
    at Object.fs.readFileSync (fs.js:347:11)
    at Server.<anonymous> (/Users/Vik/Desktop/NodeJS/routingToDifferentUrls.js:15:20)
at Server.emit (events.js:110:17)
at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:491:12)
at HTTPParser.parserOnHeadersComplete (_http_common.js:111:23)
at Socket.socketOnData (_http_server.js:343:22)
at Socket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at Socket.Readable.push (_stream_readable.js:126:10)
at TCP.onread (net.js:529:20)

然后退出。

谁能解释我为什么会收到这个错误??? 是的,我已经创建了我的 socket.html 文件,它只显示简单的文字“这是我们的 socket.html 文件”。

非常感谢您的帮助!

【问题讨论】:

    标签: javascript node.js sockets web web-development-server


    【解决方案1】:

    看来您正在使用异步的fs.readFile。所以response.end() 在完成之前被调用。因此你的错误消息write after end。你真的想使用fs.readFileSync 来获取socket.html 的内容。喜欢var data = fs.readFileSync.(__dirname + path)

    【讨论】:

    • 谢谢你!这摆脱了错误。但是现在,我有一个不同的错误。你介意帮我解决这个问题吗.. fs.js:347 throw new TypeError('Bad arguments'); ^ 类型错误:服务器上 Object.fs.readFileSync (fs.js:347:11) 的参数错误。 (/Users/Vik/Desktop/NodeJS/routingToDifferentUrls.js:15:20)
    • 我用新问题编辑了原始问题(我所做的只是将 fs.readFile 更改为 fs.readFileSince)
    • 是的,它正在回击Bad arguments,因为您将回调作为参数传递给 readFileSync,它不接受回调作为第二个参数,而是一个选项哈希。在case语句之后直接尝试var data = fs.readFileSync((__dirname + path));response.writeHead(200, {"Content-Type": "text/html"});response.write(data);..。
    • 耶终于!非常感谢你!我真的花了 3 个小时试图弄清楚这一点。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多