Я получаю ReferenceError: HTML не определен - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в Node.js, и я впервые использую Node.js. Когда я пытался подключить свой файл index.html, я получаю эту ошибку «ReferenceError: html is notfined». Это мой код 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 голосов
/ 03 мая 2018

Вы должны принять во внимание, что 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, которые избавят вас от написания хорошего веб-сервера, например express или hapi

.
0 голосов
/ 03 мая 2018

В узле 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();
    });

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...