读取两个文件并连接到相同的字符串但它失败了

时间:2017-02-28 02:44:03

标签: javascript node.js

首先,抱歉我的小英语。 我制作了一个用于测试html / css片段的节点程序。 我希望以这种方式使用:$node testing.js foo.html foo.css,但它不起作用。实际上,它在<style>个标签之间推送了所有来源。 我认为这是文件阅读过程的问题,但我无法弄明白。

var http = require("http"),
    fs = require("fs");
    filePath = process.argv;

if (filePath.length == 2) {
    console.log("need exactly 2 args for testing");
    return;
}

var htmlFile = filePath[2],
    cssFile = filePath[3];

var testHtml = "<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><title>testing</title></head><body>"

fs.readFile(htmlFile, 'utf8', function(err, html) {
    if (err) {
        console.log("html module not found");
        throw err;
    }
    else {
        testHtml += html;
    }
});

testHtml += "</body><style>"

fs.readFile(cssFile, 'utf8', function(err, css) {
    if (err) {
        console.log("css module not found");
        throw err;
    }
    else {
        testHtml += css + "</style>";
    }
});

function onRequest(request, response) {
    console.log("Request Recieved");
    response.writeHead(200, {"Content-type": "text/html"});
    response.write(testHtml);
    response.end();
}

http.createServer(onRequest).listen(8001);

1 个答案:

答案 0 :(得分:1)

由于fs.readFile是异步的,您必须在第一个回调函数中执行第二个文件读取。

fs.readFile(htmlFile, 'utf8', function(err, html) {
    if (err) {
        console.log("html module not found");
        throw err;
    }

    testHtml += html + "</body><style>";

    fs.readFile(cssFile, 'utf8', function(err, css) {
        if (err) {
            console.log("css module not found");
            throw err;
        }

        testHtml += css + "</style></html>";
    });
});

否则您可以使用readFileSync