尝试使用node.js运行'create server',如何设置脚本文件将使用npm start读取

时间:2018-04-11 12:19:51

标签: node.js npm npm-scripts npm-request 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>

的详细信息

2 个答案:

答案 0 :(得分: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脚本。

答案 1 :(得分: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);

对不起,这有点被黑了 - 我也是节点的新手。但我希望它有所帮助!