我是网络编程的新手,并开始学习NodeJs。我创建了一个仅用于测试和学习的新项目。这是项目结构
我的 Server.js 包含此代码
var http = require('http');
var url = require('url');
var fileSystem = require('fs');
var server = http.createServer(function(req, res) {
var page = url.parse(req.url).pathname;
res.writeHead(200, {"Content-Type": "text/html"});
fileSystem.readFile(getPage(page), null, function(error, data){
if(error){
throw error;
} else {
res.writeHead(data);
}
res.end();
})
});
server.listen(2312);
function getPage(page){
var content = "Templates/";
switch (page) {
case "/Page1":
content += 'Page1.html';
break;
case "/Page2":
content += 'Page2.html';
break;
case "/Page3":
content += 'Page3.html';
break;
default:
content += 'Page404.html';
}
return content;
}
我的 html文件包含非常简单的HTML代码
第1页
<!DOCTYPE html>
<html>
<head>
<title></title>
<link rel="stylesheet" href="Button.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script src="Btns.js"></script>
</head>
<body>
<button onclick="loadPage2()">Load Page 2</button>
<button onclick="loadPage3()">Load Page 3</button>
</body>
</html>
因此,在尝试http://localhost:2312/Page1
时,我收到无效的状态代码0。
_http_server.js:195 抛出新的RangeError(
Invalid status code: ${statusCode}
); ^RangeError:无效的状态代码:0 在ServerResponse.writeHead(_http_server.js:195:11) 在... \ TestProjekt \ Server.js:13:9 在FSReqWrap.readFileAfterClose [as oncomplete](fs.js:439:3)
是否可以通过这种方式加载html文件?
我知道我可以使用 Express框架但我考虑学习并从本机代码开始。
答案 0 :(得分:3)
将res.writeHead(data);
更改为res.write(data);
writeHead()
向请求发送响应标头。
write()
发送数据。
第一次调用response.write()
时,它会将缓冲的头信息和正文的第一个块发送给客户端。第二次调用response.write()
时,Node.js假设数据将被流式传输,并分别发送新数据。
答案 1 :(得分:0)
var readSream = fs.createReadStream(&#39; index.html&#39;,&#39; utf8&#39;)
readSream.pipe(响应);
var http = require('http');
var fs = require('fs');
http.createServer(function(request, response) {
response.writeHeader(200, {"Content-Type": "text/html"});
var readSream = fs.createReadStream('index.html','utf8')
readSream.pipe(response);
}).listen(3000);
console.log("server is running on port number ");