Web服务器是通过HTTP处理请求的系统, HTTP是用于在Web上或本地分发信息的基本网络协议。你可以使用Node.js的http模块从网络请求内容, 甚至创建自己的http服务器来回答其响应, 提供文件等。
在本文中, 你将学习如何使用http模块和httpdispatcher模块来实现自写的http服务器, 以添加路由功能。
实现
首先, 创建一个名为server.js的JS文件, 它将包含以下代码来创建和处理基本的http服务器:
注意:http模块已经内置在node.js中, 因此你无需下载任何模块。除非还没有。
// require the http module of node.jsvar http = require('http');
// define the port of access for your serverconst PORT = 8080;
// We need a function which handles requests and send responsefunction handleRequest(request, response){response.end('Server working properly. Requested URL : ' + request.url);
}// Create a servervar myFirstServer = http.createServer(handleRequest);
// Start the server !myFirstServer.listen(PORT, function(){// Callback triggered when server is successfully listening. Hurray!console.log("Server listening on: http://localhost:%s", PORT);
});
createServer方法返回http.Server的新实例。要创建我们的服务器, 你需要指定一个端口并使用listen方法, 这将导致服务器接受指定句柄上的连接。
要启动服务器, 请在Node.js命令提示符中使用以下命令:
node server.js
现在, 打开你喜欢的浏览器并导航到http:// localhost:8080, 你将收到以下响应(并且应根据给定的URL进行更改):
文章图片
如你所见, 服务器将回答所有URL地址。
请注意, http模块非常简单, 使用上一示例创建复杂的Web应用程序将花费大量时间来正确实施, 因此你应将上一示例用于服务文件或学习目的的简单事物。如果你正在处理复杂的项目, 则应为其使用框架, 例如Express, hapi, koa或restify。在本文中, 你将学习如何使用httpdispatcher模块创建基本的路由系统。
添加路由功能
如前所述, 你的服务器现在返回任何URL的响应, 因此, 要添加一些” 现实生活” 功能, 你的服务器需要响应特定的URL地址。
为了在这个基本示例中处理此问题, 我们需要使用一个调度程序, 它将作为一种路由器, 使你可以对特定的URL做出不同的响应。 httpdispatcher是一个简单的类, 允许开发人员为动态页面和静态资源提供清晰的分派器。
要将http调度程序添加到你的项目中, 请在Node.js命令提示符下添加执行以下命令的模块:
npm install httpdispatcher
现在, 让我们在示例中使用分派器添加一些路由:
// require the http module of node.jsvar http = require('http');
// require the dispatcher modulevar dispatcher = require('httpdispatcher');
// define the port of access for your serverconst PORT = 8080;
// We need a function which handles requests and send responsefunction handleRequest(request, response){try {// log the request on consoleconsole.log(request.url);
// Dispatchdispatcher.dispatch(request, response);
} catch(err) {console.log(err);
}}// Create a servervar myFirstServer = http.createServer(handleRequest);
// add some routes//A sample GET requestdispatcher.onGet("/", function(req, res) {res.writeHead(200, {'Content-Type': 'text/html'});
res.end('<
h1>
Hey, this is the homepage of your server<
/h1>
');
});
dispatcher.onGet("/welcome", function(req, res) {res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Welcome homepage');
});
dispatcher.onError(function(req, res) {res.writeHead(404);
res.end("Error, the URL doesn't exist");
});
// Start the server !myFirstServer.listen(PORT, function(){// Callback triggered when server is successfully listening. Hurray!console.log("Server listening on: http://localhost:%s", PORT);
});
httpdispatcher模块使你可以轻松地为不同的请求格式(POST, GET)创建路由和响应, 并且如所承诺的那样, 你现在已经拥有一个由Node.js构成的功能性http服务器, 以启动它执行:
node server.js
如果导航到http:// localhost:8080和http:// localhost:8080 / welcome, 你将分别看到示例中给出的响应。如果你尝试访问一个不存在的URL(即http:// localhost:8080 / this-doesnt-exists), 则会收到404响应, 提示” 错误, URL不存在” 。
如果你需要更强大的功能, 可以阅读我们的教程” 如何使用Express创建HTTP服务器以实现高可伸缩性项目” 。
【在Node.js中创建第一个自我实现的基本HTTP服务器(带有路由)】玩得开心 !
推荐阅读
- 如何在Node.js中使用wkhtmltopdf创建PDF
- 如果要脱颖而出,必须在幻灯片视频中包含这些独特功能
- 这是什么物联网()
- 如何在Symfony 4中漂亮地打印JsonResponse
- 简单的C语言printf函数输出
- 无线网络技术专题企业WLAN网络典型组网架构分析
- springboot整合activiti,activiti在线编辑器,敏捷快速带源码
- web前端性能优化——图片加载的优化
- Java ASM系列((059)opcode: stack)