使用节点js创建服务器时出错

Posted

技术标签:

【中文标题】使用节点js创建服务器时出错【英文标题】:Giving error while creating server using node js 【发布时间】:2021-07-02 22:20:48 【问题描述】:

我在同一个文件夹 (tut67) 中创建了这个 javascript 文件 index.html、about.html、contact.html、services.html,但它仍然为每个 html 文件提供错误。 (我使用的是 MacBook Air)。

代码如下:::

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

const 主机名 = '127.0.0.1';

常量端口 = 3000;

const home = fs.readFileSync('index.html');

const about = fs.readFileSync('./about.html');

const contact = fs.readFileSync('./contact.html');

const services = fs.readFileSync('./services.html');

const server = http.createServer((req,res)=> console.log(req.url);

res.statusCode = 200;
res.setHeader('Content-Type', 'text/html');
res.end(home);

);

server.listen(端口,主机名,() => 控制台.log(Server running at http://$hostname:$port/); );

错误如下:::

内部/fs/utils.js:307 抛出错误; ^

错误:ENOENT:没有这样的文件或目录,打开'index.html'

at Object.openSync (fs.js:476:3)
at Object.readFileSync (fs.js:377:35)
at Object.<anonymous> (/Users/shouryasharma/Desktop/Web Dev/tut67/index.js:7:17)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47 

错误号:-2, 系统调用:'打开', 代码:'ENOENT', 路径:'index.html'

【问题讨论】:

【参考方案1】:

我无法重现你的错误,你也可以这样实现你的目标。

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

const hostname = '127.0.0.1';

const port = 3000;

const home = fs.readFileSync('index.html');


const server = http.createServer((req,res)=> console.log(req.url);

res.statusCode = 200;
res.setHeader('Content-Type', 'text/html');
fs.createReadStream('index.html').pipe(res)
;
);

server.listen(port, hostname, () =>  console.log(`Server running at http:$hostname:$port`); );

【讨论】:

【参考方案2】:

Node 不了解您的文件的确切位置,即使它们位于同一目录中。假设这是您的目录结构:

tut67
     | index.html
     | about.html
     | contact.html
     | services.html
     | app.js

这将是app.js的内容:

const http = require('http');
const fs = require('fs');
const path = require('path');

const hostname = '127.0.0.1';
const port = 3000;

const home = fs.readFileSync(path.join(__dirname, 'index.html')).toString();
// const about = fs.readFileSync(path.join(__dirname, 'about.html')).toString();
// const contact = fs.readFileSync(path.join(__dirname, 'contact.html')).toString();
// const services = fs.readFileSync(path.join(__dirname, 'services.html')).toString();

// create the http server
const server = http.createServer((req,res) => 
    console.log(req.url);
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/html');
    res.end(home);
);

server.listen(port, hostname, () => 
    console.log(`Server running at http://$hostname:$port/`);
);

index.html 的示例内容可能是:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Hello World</title>
</head>
<body>
<p>Hello World!</p>
</body>
</html> 

这将呈现 index.html 并将请求 url 适当地记录到控制台。请记住,可以(并且应该)注释掉未使用的变量。

【讨论】:

以上是关于使用节点js创建服务器时出错的主要内容,如果未能解决你的问题,请参考以下文章

APN 节点:加载 PEM 文件时出错

启动节点应用程序时出错 - MEAN Stack

使用节点js进行条带支付时出错

使用 node.js 连接到 nem 测试节点时出错

我正在使用 mandrill 和 Node.js 创建一个邮件客户端...我的节点服务器在提交邮件客户端表单时收到一个空的 POST 请求正文

使用 node-xmpp 在节点中写入 Google CCS 服务器时出错