Пытаясь запустить 'create server' с помощью node.js, как настроить файлы сценария, будет читать с npm start

var fs = require('fs');
var http = require('http');

var ROOT ='./view/index.html';

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    fs.readFile(ROOT, function (err,data){
      if (err) {
        res.writeHead(404);
        res.end(JSON.stringify(err));
        return;
      }
      res.end(data);
    });
}).listen(8080);

Это обычный код создания сервера для node.js - это просто для npm start.

Интересно, как я использую файл .js в браузере (npm start)

Я думал, что fs не может читать детали <script src='...'></script>

Не знаете, в чем вопрос - хотите ли вы доставить клиентский js-файл через node.js?

Thornkey 11.04.2018 14:22

Да, правильно. Если код .js находится внутри index.html. как заставить это работать?

황정욱 11.04.2018 14:26

сделать обработчик например /script/**.js и отправить файл в ответ

Muhammad Usman 11.04.2018 14:39
0
3
158
2

Ответы 2

В настоящее время ваше приложение node.js просто знает, как обслуживать один файл на ./view/index.html. Вам нужно, чтобы он мог обслуживать разные файлы в зависимости от запроса - например, сначала он должен обслуживать файл HTML, а затем файл JS, поскольку ваш файл HTML будет иметь тег <script>, ссылающийся на файл JS. Хотя вам не нужен следующий пример в производственной среде, я стараюсь сделать его простым для примера:

var fs = require('fs');
var http = require('http');
var path = require('path');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': req.url.endsWith('html') ? 'text/html' : 'application/javascript'});    
    fs.readFile(path.join(__dirname, req.url), function (err,data){
      if (err) {
        res.writeHead(404);
        res.end(JSON.stringify(err));
        return;
      }
      res.end(data);
    });
}).listen(8080);

Теперь представьте, что у вас есть index.html в том же каталоге, что и ваш скрипт Node.js:

<!DOCTYPE html>
<html>
<head></head>
<body>
    <p>Hello, world!</p>
<script src="./hello.js"></script>
</body>
</html>

Как видите, он ссылается на JS-скрипт hello.js. Он также будет в том же каталоге.

// hello.js 

alert('hello, world!');

Теперь, если ваш HTML-файл называется index.html, вы можете получить к нему доступ по адресу localhost:8080/index.html, и он также загрузит ваш скрипт hello.js.

Прямо сейчас все, что вы делаете, это заставляете сервер отвечать содержимым файла в ROOT. Таким образом, любые отправленные запросы, независимо от пути, получат вместо этого ROOT-файл.

Вместо этого вы должны заставить ваш обработчик создать запрошенный файл:

var fs = require('fs');
var http = require('http');

var ROOT ='./view/index.html';

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    if (req.url=="/")req.url="/index.html";
    fs.readFile("./view"+req.url, function (err,data){
      if (err) {
        res.writeHead(404);
        res.end(JSON.stringify(err));
        return;
      }
      res.end(data);
    });
}).listen(8080);

Извините, это немного взломано - я тоже новичок в node. Но я надеюсь, что это поможет!

Другие вопросы по теме