我得到一个ReferenceError:未定义html

时间:2018-05-03 13:38:26

标签: javascript json node.js npm

我是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)

如果有人能告诉我为什么会收到这个错误,而且我错过了任何一件事,那真的很棒。 谢谢

2 个答案:

答案 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服务器时会花费很多精力,例如expresshapi

答案 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();
    });

});