我创建了一个带有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文件中写入脚本的完整路径,页面找不到它,我该怎么办?
答案 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");
});