使用node.js在javascript服务器中运行html

时间:2017-02-27 20:19:46

标签: javascript html node.js webserver

这是我的Javascript代码......

var http = require ('http');
var fs = require('fs');

var port = '2405';

function send404Response(response){
  response.writeHead(404, {"Content_Type": "text/plain"});
  response.write("Error 404: Page not found!");
  response.end();  
}

function onRequest(request,response){
  if(request.method == 'GET' && request.url == '/'){
    response.writeHead(200, {"Content-Type": "text/html"});
    fs.createReadStream("./index.html").pipe(response);
  } else{
    send404Response(response);
  }
}

http.createServer(onRequest).listen(port);
console.log("Server is now running...");

当我在终端中编写节点/Users/Sur​​ajDayal/Documents/ass2/app.js并转到http://localhost:2405/时,终端会出错....

  

events.js:160        扔掉//未处理的错误'事件        ^

     

错误:ENOENT:没有这样的文件或目录,打开' ./ index.html'      在错误(本机)

目录结构:

Folder Layout

2 个答案:

答案 0 :(得分:1)

您可能正在从另一个目录启动您的应用程序。此处./index.html的相对路径将相对于当前工作目录。

如果您想相对于当前正在运行的文件,请尝试__dirname

fs.createReadStream(__dirname + '/index.html').pipe(response);

此外,如果您需要为HTTP服务执行更复杂的操作,请查看Express。有一个很好的静态文件模块,但它也是一个很好的实用程序,用于路由和HTTP应用程序所需的其他常用功能。

答案 1 :(得分:0)

使用

var path = require('path');
fs.createReadStream(path.join(__dirname, "index.html")

您的版本不起作用,因为相对路径是相对于当前工作目录(启动节点时控制台中的当前目录),而不是相对于脚本文件。

__dirname给出当前脚本文件的目录。