「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」。
前提
创建一个名为index.js.
在文件中,HTTP像这样要求模块:
const http = require('http');
调用createServer()它的方法并将其分配给一个常量,如下所示:
const server = http.createServer();
像这样调用listen()服务器常量上的方法:
server.listen();
给它一个端口来监听。现在这可以是任何空闲端口,但我们将使用3000常规端口。所以我们有这个:
const http = require('http');
const server = http.createServer();
server.listen(3000);
基本上,这就是创建服务器所需要做的一切。
如何测试服务器
在您的终端(应该在项目目录中)中,键入node index.js并点击Enter按钮。
在地址栏中打开新标签页postman或任何网页,然后键入并点击按钮。(我将使用邮递员,因为它具有开箱即用的扩展功能。)browser``http://localhost:3000/``Enter
您会注意到您的浏览器或邮递员会像这样无限期地加载:
耶!没事儿。我们的服务器已启动并正在运行。
但是已经很无聊了。我们需要让服务器与我们交谈。
让我们立即着手。
如何从服务器发回响应
回到代码中,将以下内容添加到const server = http.createServer();:
(request, response) => {
response.end('Hey! This is your server response!');
}
所以我们现在有:
const http = require('http');
const server = http.createServer((request, response) => {
response.end('Hey! This is your server response!');
});
server.listen(3000);
在基本术语中,request对象告诉server我们我们想要什么,response对象告诉我们server必须对我们说些什么request,并且end()方法终止与 的通信server response。
希望这是有道理的!
现在,按照我们上面概述的步骤再次测试服务器,您的服务器应该正在与您交谈。这是我的输出:
随意更改字符串。
用于Control/Command + C终止服务器并运行node index以再次启动服务器。
看起来很锋利!对?都好...
如何使用 Express 创建节点服务器
在本节中,我们希望通过使用Expressand Nodemon(node-mon 或 no-demon,发音随意)让我们的生活更轻松。
在终端中,安装以下内容:
npm install express --save
npm install nodemon --save-dev
创建一个名为app.js或任何适合您的新文件
在文件中,
- 像这样要求快递:
const express = require('express');
- 将 express 方法分配给一个常量,如下所示:
const app = express();
- 导出 app 常量,使其可用于目录中的其他文件,如下所示:
module.exports = app;
所以我们有:
const express = require('express');
const app = express();
module.exports = app;
在index.js文件中,要求app我们刚才导出的:
const app = require('./app');
接下来,使用应用程序设置端口,如下所示:
app.set('port', 3000);
http.createServer()并将方法中的代码替换为app如下所示:
const server = http.createServer(app);
这会将所有 API 管理定向到app.js有助于分离关注点的文件。
所以我们的index.js文件现在看起来像这样:
const http = require('http');
const app = require('./app');
app.set('port', 3000);
const server = http.createServer(app);
server.listen(3000);
回到我们的app.js文件,因为我们已经将所有 API 管理都指向它,让我们创建一个端点来像以前一样与我们对话。
所以在 之前module.exports = app,添加以下代码:
app.use((request, response) => {
response.json({ message: 'Hey! This is your server response!' });
});
我们现在有:
const express = require('express');
const app = express();
app.use((request, response) => {
response.json({ message: 'Hey! This is your server response!' });
});
module.exports = app;
啊……是时候测试我们的应用了。
为了测试我们的应用程序,我们现在输入nodemon index我们的终端并点击Enter按钮。这是我的终端:
您是否注意到 nodemon 与 Node 不同,它为我们提供了在终端中执行的详细信息?这就是nodemon的美妙之处。
您现在可以转到postman或任何browser地址栏中,键入http://localhost:3000/并点击Enter。查看我的输出:
哇!它正在工作。
现在有更多使用 nodemon 的理由。转到app.js文件并将message字符串更改为您选择的任何字符串,保存并观看terminal.
哇...它会自动重新启动服务器。这对于 Node 来说是不可能的。我们不得不自己重新启动服务器。
如何保护服务器并使其永不过时
在index.js文件中,将所有代码替换为以下内容:
const http = require('http');
const app = require('./app');
const normalizePort = val => {
const port = parseInt(val, 10);
if (isNaN(port)) {
return val;
}
if (port >= 0) {
return port;
}
return false;
};
const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
const errorHandler = error => {
if (error.syscall !== 'listen') {
throw error;
}
const address = server.address();
const bind = typeof address === 'string' ? 'pipe ' + address : 'port: ' + port;
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges.');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use.');
process.exit(1);
break;
default:
throw error;
}
};
const server = http.createServer(app);
server.on('error', errorHandler);
server.on('listening', () => {
const address = server.address();
const bind = typeof address === 'string' ? 'pipe ' + address : 'port ' + port;
console.log('Listening on ' + bind);
});
server.listen(port);
process.env.PORT使应用程序动态化,以便将来在实时服务器上托管时可以运行分配给它的任何端口。
该normalizePort函数返回一个有效端口,无论是作为数字还是字符串提供。
该errorHandler函数检查各种错误并适当地处理它们——然后将其注册到服务器。
还注册了一个listening事件侦听器,将运行服务器的端口或命名管道记录到控制台。
哟!我们的服务器现在更加安全和强大。请注意,nodemon 还显示了我们正在侦听的端口。
有了它,一个简单、安全且健壮的 Node.js 服务器。