• 读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)

    待续。。。

  • 相关阅读:
    数组
    原生获取 键盘 keycode 鼠标 键码
    javascript 拖拽
    简单的鼠标拖拽
    vue中格式化时间戳
    使用koa+angular+mysql 完成了一个企业站
    koa2+mysql5+angularjs1 搭建前后端全栈项目
    javascript利用闭包实现迭代器轮询数组中的元素
    AngularJS 1.x版本 学习教程
    改变,从羡慕别人开始
  • 原文地址:https://www.cnblogs.com/huayang1995/p/15594246.html
Copyright © 2020-2023  润新知