• node05---模块


    Node.js开发服务器,数据、路由。本地关心的效果,交互;
    Node.js实际上是极客开发出的一个小玩具,不是银弹。有着别人不具备的怪异特点:
    首先,Node不为每个用户开辟一个线程,所以非常单线程、非阻塞 I/O、事件驱动。 实际上是一个特点。
    极端的选择了单线程。单线程,要照顾所有的用户,那么就必须有非阻塞I/O,否则一个人的I/O就把别人、自己都阻塞了。一旦有非阻塞I/O,一个人如果I/O去了,就会放弃CPU的使用权,换成另一个人使用CPU(或者执行此人后面的语句)。所以CPU的利用率100%。第一个人I/O结束了,就要用事件来通知线程,执行回调函数。此时必须有事件环,就有一个排队调度机制。Node中有超过半数的C++代码,在搭建事件环。
    
    Node.js和别的老牌3P不一样: 
    1) 没有自己的语法,使用V8引擎,所以就是JS。V8引擎是解析JS的,效率非常高,并且V8中很多东西都是异步的。Node就是将V8中的一些功能自己没有重写(别人做了,自己就站在巨人肩膀上),移植到了服务器上。
    2) 没有web容器,就是安装配置完成之后,没有一个根目录。
    命令提示符所在路径太重要了,因为程序中的所有相对路径”./”,都是相对这个命令提示符路径的,而不是相对于js文件自己。
    系统中,80端口,就是默认http端口。所以当没有端口号的时候,就是80端口。
    server.listen(80,"127.0.0.1");
    二、模块
    ● 在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分。
    不可能用一个js文件去写全部的业务。肯定要有MVC。
    
    ● 狭义的说,每一个JavaScript文件都是一个模块;而多个JavaScript文件之间可以相互require,他们共同实现了一个功能,他们整体对外,又称为一个广义上的模块。
    
    ● Node.js中,一个JavaScript文件中定义的变量、函数,都只在这个文件内部有效。当需要从此JS文件外部引用这些变量、函数时,必须使用exports对象进行暴露。使用者要用require()命令引用这个JS文件。
    
    foo.js文件中的代码:
    1var msg = "你好";
    2
    3exports.msg = msg;
    msg这个变量,是一个js文件内部才有作用域的变量。
    如果别人想用这个变量,那么就要用exports进行暴露。
    
    使用者:
    1var foo = require("./test/foo.js");
    2
    3console.log(foo.msg);
    使用者用foo来接收exports对象,也就是说,这里的foo变量,就是文件中的exports变量。
    
    ● 一个JavaScript文件,可以向外exports无数个变量、函数。但是require的时候,仅仅需要require这个JS文件一次。使用的它的变量、函数的时候,用点语法即可。所以,无形之中,增加了一个顶层命名空间。
    
    js文件中,可以用exports暴露很多东西,比如函数、变量。
    1var msg = "你好";
    2var info = "呵呵";
    3
    4function showInfo(){
    5    console.log(info);
    6}
    7
    8exports.msg = msg;
    9exports.info = info;
    10exports.showInfo = showInfo;
    在使用者中,只需要require一次。
    1var foo = require("./test/foo.js");
    相当于增加了顶层变量。所有的函数、变量都要从这个顶层变量走:
    1console.log(foo.msg);
    2console.log(foo.info);
    3foo.showInfo();
    
    Node中,js文件和js文件,就是被一个个exports和require构建成为网状的。
    不是靠html文件统一在一起的。
    
    ● 可以将一个JavaScript文件中,描述一个类。用
    module.export = 构造函数名;
       的方式向外暴露一个类。
    
    也就是说,js文件和js文件之间有两种合作的模式:
    1) 某一个js文件中,提供了函数,供别人使用。 只需要暴露函数就行了; exports.msg=msg;
    2) 某一个js文件,描述了一个类。   module.exports = People;
    
    
    ● 如果在require命令中,这么写:
    1var foo = require("foo.js");   //没有写./, 所以不是一个相对路径。是一个特殊的路径
    那么Node.js将该文件视为node_modules目录下的一个文件
    node_modules文件夹并不一定在同级目录里面,在任何直接祖先级目录中,都可以。甚至可以放到NODE_PATH环境变量的文件夹中。这样做的好处稍后你将知道:分享项目的时候,不需要带着modules一起给别人。
    
    ● 我们可以使用文件夹来管理模块,比如
    1var bar = require("bar"); 
    那么Node.js将会去寻找node_modules目录下的bar文件夹中的index.js去执行。
    
    每一个模块文件夹中,推荐都写一个package.json文件,这个文件的名字不能改。node将自动读取里面的配置。有一个main项,就是入口文件:
    1{
    2  "name": "kaoladebar",
    3  "version": "1.0.1",
    4  "main" : "app.js"
    5}
    6
    package.json文件,要放到模块文件夹的根目录去。

    04.js

    /**
     * Created by Danny on 2015/9/20 10:28.
     */
    var foo = require("./test/foo.js");// './'表示这个文件的根目录
    
    console.log(foo.msg);
    console.log(foo.info);
    foo.showInfo();

    foo.js

    /**
     * Created by Danny on 2015/9/20 10:29.
     */
    console.log("111");// 引入本文件会执行这行代码
    var bar = require("./bar.js");
    var msg = "你好";
    var info = "呵呵";
    
    function showInfo(){
        console.log(info);
    }
    
    exports.msg = msg;
    exports.info = info;
    exports.showInfo = showInfo;

    bar.js

    /**
     * Created by Danny on 2015/9/20 11:58.
     */
    console.log("我是bar");// 引入本文件会执行这行代码

    05.js

    /**
     * Created by Danny on 2015/9/20 10:28.
     */
    
    var People = require("./test/People.js");
    var xiaoming = new People("小明","男","12");
    xiaoming.sayHello();

    People.js

    /**
     * Created by Danny on 2015/9/20 10:43.
     */
    function People(name,sex,age){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    
    People.prototype = {
        sayHello : function(){
            console.log(this.name + this.sex + this.age);
        }
    }
    
    //此时,People就被视为构造函数,可以用new来实例化了。
    module.exports = People;

    06.js

    /**
     * Created by Danny on 2015/9/20 10:28.
     */
    var foo = require("foo.js");  //没有写./,将该文件视为node_modules目录下的一个文件
    
    console.log(foo.msg);

    07.js

    /**
     * Created by Danny on 2015/9/20 10:28.
     */
    var bar = require("bar");  
    /*
    在引用一个文件夹,将会去寻找node_modules目录下的bar文件夹中的index.js去执行。  没有index.js时,每一个模块文件夹中,推荐都写一个package.json文件,这个文件的名字不能改。node将自动读取里面的配置。有一个main项,就是入口文件:
    1{
    2  "name": "kaoladebar",
    3  "version": "1.0.1",
    4  "main" : "app.js"
    5}
    6
    package.json文件,要放到模块文件夹的根目录去。*/
    
    console.log(bar.msg);
  • 相关阅读:
    acdream 1017: Fast Transportation 网络流层次图
    centos5的kernel source
    Linux内核源代码的阅读及相关工具介绍(转)
    gcc生成静态库和动态库(转)
    写一篇大家一看就会的教程《JNI初步》(转)
    jni.h
    5分钟学用Lucene
    (VC2005) picture 控件显示16*16的Icon
    (VC/MFC)通过结构体传递参数给线程
    (VC2005)MFC中添加控件的成员变量.
  • 原文地址:https://www.cnblogs.com/yaowen/p/7032524.html
Copyright © 2020-2023  润新知