0
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>

4

2 回答 2

0

现在你要做的就是让服务器响应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);

抱歉,这有点被黑了-我也是节点新手。但我希望它有所帮助!

于 2018-04-11T12:40:59.247 回答
0

目前,您的 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脚本。

于 2018-04-11T12:40:13.950 回答