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>
答案 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);
对不起,这有点被黑了 - 我也是节点的新手。但我希望它有所帮助!