2016-06-01 1 views
0

Я создал веб-сервер с NodeJs, который загружает на нем HTML-страницу со сценарием внутри. Если я открою HTML-страницу в том же каталоге, что и script.js, скрипт, очевидно, работает. Если я открою его на веб-сервере, страница HTML не найдет скрипт и, следовательно, не сработает. Я попытался изменить путь к файлу, но он сказал: «Не удается создать каталог ...» Как я могу это сделать? Спасибо.NodeJS: HTML-страница не читает путь к скрипту

Это код, который запускает веб-сервер и загрузить страницу 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

'express.static' ваш друг – kiro112

ответ

0

Вы не можете найти js, потому что файл js не находится на веб-сервере. Прежде чем ссылаться на 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> 
+0

С вашего кода я получаю ошибку 404 не найден. Очевидно, что каталог правильный. – DavidRT49

+0

показать ваш каталог и код – darr

0

использование express.static - служить статические файлы, такие как изображения, CSS файлов, и файлы JavaScript, используйте функцию express.static встроенного промежуточного программного обеспечения в Express.

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

, то вы можете использовать т он файлы внутри /в/дома/папку через /home/file.ext

+0

Я пробовал, но он все еще не читает сценарий. – DavidRT49

0

UPDATE:

сценарий находится в «/ home/Script»

Это мой 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/'); 
}); 
Смежные вопросы