Web服务器是通过HTTP处理请求的系统, HTTP是用于在Web上或本地分发信息的基本网络协议。你可以使用Node.js的http模块从网络请求内容, 甚至创建自己的http服务器来回答其响应, 提供文件等。
在本文中, 你将学习如何使用http模块和httpdispatcher模块来实现自写的http服务器, 以添加路由功能。
实现
首先, 创建一个名为server.js的JS文件, 它将包含以下代码来创建和处理基本的http服务器:
注意:http模块已经内置在node.js中, 因此你无需下载任何模块。除非还没有。
// require the http module of node.js
var http = require('http');
// define the port of access for your server
const PORT = 8080;
// We need a function which handles requests and send response
function handleRequest(request, response){
response.end('Server working properly. Requested URL : ' + request.url);
}
// Create a server
var 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.js
var http = require('http');
// require the dispatcher module
var dispatcher = require('httpdispatcher');
// define the port of access for your server
const PORT = 8080;
// We need a function which handles requests and send response
function handleRequest(request, response){
try {
// log the request on console
console.log(request.url);
// Dispatch
dispatcher.dispatch(request, response);
} catch(err) {
console.log(err);
}
}
// Create a server
var myFirstServer = http.createServer(handleRequest);
// add some routes
//A sample GET request
dispatcher.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服务器以实现高可伸缩性项目”。
玩得开心 !
评论前必须登录!
注册