Java教程

读Node入门有感——>【1】构建基础的HTTP服务器

本文主要是介绍读Node入门有感——>【1】构建基础的HTTP服务器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

我们可以把不同功能的代码放入不同的模块中,保持代码分离——这种方法允许你拥有一个干净的主文件(main file),你可以用Node.js执行它;同时你可以拥有干净的模块,她们可以被主文件和其他的模块调用
一般情况下把主文件叫做index.js。把服务器模块放进叫server.js的文件里。

让我们先从服务器模块开始。在项目的根目录下创建一个叫server.js的文件,并写入一下代码:
var http = require("http");
http.createServer(function(request,response){
response.writeHead(200,{"Content-Type":"text/plain"});
response.write("Hello World");
response.end()
}).listen(8888);
搞定!刚刚完成了一个可以工作的HTTP服务器。为了证明这一点,我们来运行并且测试这段代码。首先,用Node.js执行脚本:
node server.js
接下来,打开浏览器访问http://localhost:8888/,就会看到一个写着“Hello World”的网页。
分析以上HTTP服务器
第一行请求(require)是Node.js自带的http模块,并且把它赋值给http变量。
接下来我们调用http模块提供的函数:createServer。这个函数会返回一个对象。这个对象有一个listen方法,这个方法有一个数值参数,指定这个HTTP服务器监听的端口号。
在JavaScript中,一个函数可以作为另一个函数接收的一个参数。我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数。如下所示:
例1:
function say(word){
console.log(word);
}
function execute(someFunction,value){
someFunction(value);
}
execute(say,"Hello");
这里我们把say函数先定义为一个变量进行传递。这里传递的不是say的返回值,而是say本身!
当然,因为say有一个变量,execute在调用someFunction时可以传递这样一个变量。
例2:
function execute(someFunction,value){
someFunction(value);
}
execute(function(word){
console.log(word)
},"Hello");
这里是直接在传递过程中直接定义,也称为匿名函数。
函数传递是如何让HTTP服务器工作的
image
现在它看上去应该清晰了很多:我们向createServer函数传递了一个匿名函数。
用一下代码也可以达到同样的目的:
var http = require("http");
function onRequest(request,response){
response.writeHead(200,{"Content-Type":"text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
如何证明,在创建完服务器之后,即使没有HTTP请求进来、我们的回调函数也没有被调用的情况下,我们的代码继续有效呢?我们试试这个
var http = require("http");
function onRequest(request,response){
console.log("Request received");
response.writeHead(200,{"Content-Type":"text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started");
注意:在onRequest(回调函数)触发的地方,我用console.log输出了一段文本。在HTTP服务器开始工作之后,也输出一段文本。
当我们与往常一样,运行它node server.js,它会马上在命令行上输出“Server has started”。当我们向服务器发出请求(在浏览器中访问http://localhost:8888/),"Request received."这条消息就会在命令行中出现。
这就是事件驱动的异步服务器端JavaScript和它的回调啦!
(请注意:当我们在服务器访问网页时,我们的服务器可能会输出两次“Request received.”。;那是因为大部分浏览器都会在你访问http://localhost:8888/时尝试读取http://localhost:8888/favicon.ico)

待续。。。

这篇关于读Node入门有感——>【1】构建基础的HTTP服务器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!