我是Node.js的新手,这是我第一次使用Node.js.当我尝试连接我的index.html文件时,我得到这个'ReferenceError:html is defined defined'错误。 这是我的index.js代码
var http = require('http');
var fs = require('fs');
var port = 3030;
var host = '127.0.0.1';
fs.readFile('index.html', (err,html)=>{
if(err){
throw err;
}
});
var server = http.createServer((req,res)=>{
res.statusCode = 200;
res.setHeader('Content-type','text/plain');
res.write(html);
res.end();
});
server.listen(port,host,() =>{
console.log('Server started with port: '+port);
});
这是我的index.html代码,
`<html>
<body>
<h1>Node JS</h1>
</body>
</html>
我得到的错误,
res.write(html);
^
ReferenceError: html is not defined
at Server.http.createServer
(C:\Users\manee\OneDrive\Documents\Nodejs\index.js:15:15)
at emitTwo (events.js:126:13)
at Server.emit (events.js:214:7)
at parserOnIncoming (_http_server.js:602:12)
at HTTPParser.parserOnHeadersComplete (_http_common.js:116:23)
如果有人能告诉我为什么会收到这个错误,而且我错过了任何一件事,那真的很棒。 谢谢
答案 0 :(得分:1)
你应该考虑到nodejs经常使用异步调用,你的代码也是如此。
fs.readFile('index.html', (err,html)=>{
if(err){
throw err;
}
console.log(html); // html works here
});
console.log(html); // html is undefined here
这应该有效
fs.readFile('index.html', (err,html)=>{
if(err){
throw err;
}
var server = http.createServer((req,res)=>{
res.statusCode = 200;
res.setHeader('Content-type','text/plain');
res.write(html);
res.end();
});
server.listen(port,host,() =>{
console.log('Server started with port: '+port);
});
});
另一方面,除了学习目的外,我不建议像这样编写服务器。有现成的基于nodejs的框架,在编写好的Web服务器时会花费很多精力,例如express或hapi
答案 1 :(得分:0)
在节点js中,您的服务器在从磁盘读取文件之前尝试返回该文件。这是节点js回调的基本性质。
var server = http.createServer((req,res)=>{
res.statusCode = 200;
res.setHeader('Content-type','text/plain');
fs.readFile('index.html', (err,html)=>{
if(err){
throw err;
}
res.write(html);
res.end();
});
});