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

Posted

技术标签:

【中文标题】使用 node.js 在 javascript 服务器中运行 html【英文标题】:running html in javascript server with node.js 【发布时间】:2017-07-18 14:42:34 【问题描述】:

这是我的 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' 在错误(本机)

目录结构:

【问题讨论】:

NodeJS accessing file with relative path的可能重复 【参考方案1】:

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

如果你想相对于当前运行的文件,试试__dirname

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

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

【讨论】:

【参考方案2】:

使用

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

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

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

【讨论】:

以上是关于使用 node.js 在 javascript 服务器中运行 html的主要内容,如果未能解决你的问题,请参考以下文章

使用 Node.js 与 PHP 有啥优势 [重复]

使用 Node.js 与 PHP 有啥优势 [重复]

node.js 初识node.js,运行在服务端的 JavaScript

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

如何在原生 JavaScript 和 node.js 中使用长轮询?

使用 Mongoose+Node.js 在 MongoDB 中存储非结构化 JavaScript 对象