NodeJS:HTML页面没有读取脚本路径

时间:2016-06-01 09:11:16

标签: javascript html node.js express

我创建了一个带有NodeJs的Web服务器,在其上加载了一个带有脚本的HTML页面。如果我在与script.js相同的目录中打开HTML页面,脚本显然有效。如果我在Web服务器中打开它,HTML页面找不到脚本,因此不起作用。我试图改变文件的路径,但它说'#34;无法进入目录......"我能怎么做?谢谢。

这是启动网络服务器并上传html网页的代码:

var http = require('http'),
    fs = require('fs');
fs.readFile('/home/Test.html', function (err, html) {

    http.createServer(function(req, res) {
        res.writeHeader(200, {"Content-Type": "text/html"});
        res.write(html);
        res.end();
    }).listen(1337, '127.0.0.1');

    console.log('Server running at http://127.0.0.1:1337/');
});

这是script.js文件:

function saveTextAsFile()
{

    var textToWrite = document.getElementById("inputTextToSave").value;
    var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'});
    var fileNameToSaveAs = "Test.txt";

    var downloadLink = document.createElement("a");
    downloadLink.download = fileNameToSaveAs;
    downloadLink.innerHTML = "My Hidden Link";


    window.URL = window.URL || window.webkitURL;

    downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
    downloadLink.onclick = destroyClickedElement;
    downloadLink.style.display = "none";

    document.body.appendChild(downloadLink);

    downloadLink.click();
}

function destroyClickedElement(event)
{
    document.body.removeChild(event.target);
}

这是HTML文件:

<html><head><title>Test</title><script type="text/javascript" src="/home/Script.js"></script>
</head><body>
<textarea id="inputTextToSave" style="width:512px;height:640px">

Text....

</textarea> <br>
<br><button onclick="saveTextAsFile()">Download</button>

同时在HTML文件中写入脚本的完整路径,页面找不到它,我该怎么办?

4 个答案:

答案 0 :(得分:0)

您找不到js,因为js文件不在Web服务器上。在引用js之前,请确保它在服务器上,您可以从服务器加载它,如下所示:“http://127.0.0.1:1337/home/Script.js”。我们所有的静态文件,例如img,css,js都应该放在服务器上,所以我们可以使用它们。

这是我的代码: 的 app.js:

var http = require("http"),
url  = require("url"),
path = require("path"),
fs   = require("fs");
http.createServer(function (req, res) {
var pathname=__dirname+url.parse(req.url).pathname;
if (path.extname(pathname)=="") {
    pathname+="/";
}
if (pathname.charAt(pathname.length-1)=="/"){
    pathname+="home/Test.html";
}
fs.exists(pathname,function(exists){
    if(exists){
        switch(path.extname(pathname)){
            case ".html":
                res.writeHead(200, {"Content-Type": "text/html"});
                break;
            case ".js":
                res.writeHead(200, {"Content-Type": "text/javascript"});
                break;
            case ".css":
                res.writeHead(200, {"Content-Type": "text/css"});
                break;
            case ".gif":
                res.writeHead(200, {"Content-Type": "image/gif"});
                break;
            case ".jpg":
                res.writeHead(200, {"Content-Type": "image/jpeg"});
                break;
            case ".png":
                res.writeHead(200, {"Content-Type": "image/png"});
                break;
            default:
                res.writeHead(200, {"Content-Type": "application/octet-stream"});
        }
        fs.readFile(pathname,function (err,data){
            res.end(data);
        });
    } else {
        res.writeHead(404, {"Content-Type": "text/html"});
        res.end("<h1>404 Not Found</h1>");
    }
 });
}).listen(1337, "127.0.0.1");
console.log("Server running at http://127.0.0.1:1337/");

<强>的test.html:

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script type="text/javascript" src="home/Script.js"></script>
</head><body>
<textarea id="inputTextToSave" style="width:512px;height:640px">
111
Text....
</textarea>
<br>
<br><button onclick="saveTextAsFile()">Download</button>
</body>
</html>

答案 1 :(得分:0)

使用express.static - 要提供静态文件(如图像,CSS文件和JavaScript文件),请使用Express中的express.static内置中间件功能。

app.use('/home', express.static(__dirname + '/to/home/folder'));

然后您就可以使用 / to / home / folder 中的文件 通过 /home/file.ext

答案 2 :(得分:0)

<强> 更新:

脚本位于&#34; / home / Script&#34;

这是我的 app.js ,现在,但HTML页面仍未阅读脚本。

var http = require('http'),
    fs = require('fs');
var express = require('express');
var app = express();

fs.readFile('/home/test.html', function (err, html) {

    http.createServer(function(req, res) {
        res.writeHeader(200, {"Content-Type": "text/html"});
        res.write(html);
        res.end();

        app.use('/home', express.static(__dirname + '/Script'));

    }).listen(1337, '127.0.0.1');

    console.log('Server running at http://127.0.0.1:1337/');
});

答案 3 :(得分:0)

让我们分析您的代码

app.use('/home', express.static(__dirname+'/script'));

/home是该语句实际上是一个虚拟目录,而不是确切的文件夹名称。您可以使用任何单词代替“家”。现在,__dirname在此处指定此app.js文件所在的当前物理文件夹。它是内置关键字。 由于您的script.js和HTML和app.js文件都位于同一文件夹中,因此您无需在__dirname后面附加任何内容。

因此,您应该将上面的代码语句修改为此

app.use('/home', express.static(__dirname));

您的脚本标签应该是这样的

<script type="text/javascript" src="script.js"></script>

由于您使用的是express,因此您只需编写此代码即可为您的页面提供服务,而无需编写冗长的本机代码

    app.use('/home', express.static(__dirname));
    app.get('/home',function(req,res,next){
        res.sendFile(__dirname+ '/test.html');
    });
    app.listen(1337, '127.0.0.1',function(){
        console.log("server is listening to the port 1337");
    });