Node.js系列笔记-3(不定期更新)

  • Node.js模块系统
    • 概况
      • 模块系统用来让Node.js文件可以相互调用
      • 模块时Node.js应用程序的基本组成部分,文件和模块一一对应
      • 这个文件可以是JavaScript代码,JSON或者编译过的C/C++扩展
    • 创建模块
      • main.js
      • 1 var hello = require('./hello');
        2 hello.world();
      • hello.js
      • 1 exports.world = function() {
        2     console.log('Hello World!');
        3 }
      • Node.js提供了exports和require两个对象,其中exports是模块公开的接口,require用于从外部获取一个模块的接口,即所获取模块的exports对象
    • 服务端的模块存储位置
      • Node.js的require方法具有固定的查找策略
      • 从文件模块缓存中加载,优先级最高
      • 从原生模块加载,优先级仅次于文件模块缓存,而原声模块也具有一个缓存区
      • 从文件加载,当文件模块缓存中不存在,且不是原生模块,Node.js会解析require方法传入的参数,从文件系统中加载实际的文件
      • 接收以下几种参数的传递
        • http/fs/path 原生模块
        • ./mode  ../mod 相对路径的文件模块
        • /pathtomodule/mode 绝对路径的文件模块
        • mod 非原生模块的文件模块
  • Node.js函数
    • 概况
      • 函数可以作为参数,可以预先定义函数,作为参数传递,也可直接在传递参数的地方定义参数,这样函数可以匿名
      • 函数同样可以作为变量,比如可以这样
      • 1 function exe(someF, value) {
        2     someF(value);
        3 }

         someF作为一个函数参数

      • 注意匿名函数的使用方式,这个已经很熟悉了
  • Node.js路由
    • 使用典型的MVC架构,浏览器发送请求,由路由控制接受,根据不同的路径定向到不同的服务器,而控制器处理用户具体的请求,比如访问数据库中的对象,即模型部分,生成视图的HTML,最后再由控制器返回给浏览器,完成一次请求
    • 模块基本思路
      • 我们需要为路由请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码
      • 因此我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数,这一功能究竟属于服务器还是路由值得探讨,但暂定为HTTP服务器的功能
      • 我们需要的数据都包含在request对象中,该对象作为onRequest()回调函数的第一个参数传递。而为了解析这些数据,需要额外的模块,url和querystring
    • 模块代码
      • server.js
      •  1 var http = require("http");
         2 var url = require("url");
         3 
         4 function start(route){
         5     function onRequest(request, response){
         6         var pathname = url.parse(request.url).pathname;
         7         console.log("Request for " + pathname + " received.");
         8         
         9         route(pathname);
        10         
        11         response.writeHead(200, {"Content-Type": "text/plain"});
        12         response.write("Hello World!");
        13         response.end();
        14     }
        15     
        16     http.createServer(onRequest).listen(8888);
        17     console.log("Server has started.");
        18 }
        19 
        20 exports.start = start;
      • router.js
      • 1 function route(pathname){
        2     console.log("About to route a request for" + pathname);
        3 }
        4 
        5 exports.route = route;
      • index.js
      • 1 var server = require("./server");
        2 var router = require("./router");
        3 server.start(router.route);
    • 显示
    • F:\nodejs\Project>node index.js
      Server has started.
      Request for / received.
      About to route a request for/
      Request for /favicon.ico received.
      About to route a request for/favicon.ico

       

    • favicon.ico
      • 指的是网站图标文件,即显示在网站地址最前面的一张图片,可以在网站根目录放置图片,且命名为FAVICON.ICO
      • favorites icon 显示在收藏夹或者地址栏
      • 浏览器调用原理是首先在网页所在目录寻找favicon.ico文件,没有找到就到网站的根目录去找
posted @ 2016-08-17 16:34  寒汀暮雨钓孤舟  阅读(234)  评论(0编辑  收藏  举报