函数调用

1. 文件内普通函数调用

创建一个js文件命名为2_callFunction.js,其中定义一个函数fun1,向返回对象输出了一段字符串“你好,我是fun1”。

 //--------------------2_callFunction.js---------------------------------    
var  http = require('http');       
http.createServer(function    (request,    response)    {      
    response.writeHead(200,    {'Content-Type':    'text/html;    charset=utf-8'});      
    if(request.url!=="/favicon.ico"){ //清除第2此访问  
        fun1(response);//调用普通函数fun1
        response.end();    
    }  
}).listen(8000);      
console.log('Server running at http://127.0.0.1:8000/');    
//---普通函数      
function  fun1(res){      
    res.write("你好,我是fun1");      
}      

我们运行:node 2_callFunction,打开浏览器

2. 调用其他文件里的函数

  首先我们先创建一个otherfuns.js文件,这个文件里有两个函数,call函数被controller调用,这两个函数都向response对象输出一段字符串,函数通过module.exports提供给外部调用。这里我们只提供对外一个函数controller

 //-------------------models/otherfuns.js--------------------------      
function  controller(res){      
    res.write("执行controller <br>");      
    call(res);      
    res.end();      
}      
function  call(res){      
    res.write("执行call");      
}      
module.exports  =  controller;    //只支持一个函数      

我们通过require将otherfuns.js引入到主文件里,require工作机制参见 require() 源码解读

下面两句都可以调用到controller函数:

1) var other =new otherfun (response);//otherfuns.js 里的方法controller被调用
 2) otherfun (response);//otherfuns.js 里的方法controller被调用

 //--------------------2_callFunction.js---------------------------------  调用otherfuns.js里的函数
var  http = require('http');    
var  otherfun = require('./models/otherfuns.js');         
http.createServer(function    (request,    response)    {      
    response.writeHead(200,    {'Content-Type':    'text/html;    charset=utf-8'});      
    if(request.url!=="/favicon.ico"){ //清除第2此访问  
var other =new otherfun (response);//otherfuns.js 里的方法controller被调用
//otherfun (response);//otherfuns.js 里的方法controller被调用
        response.end();    
    }  
}).listen(8000);      
console.log('Server running at http://127.0.0.1:8000/');  

我们运行:node 2_callFunction,打开浏览器

3. 提供调用多个函数的写法:

第一种:

 //支持多个函数    
function  controller(res){      
    res.write("执行controller <br>");           
    res.end();      
}      
function  call(res){      
    res.write("执行call");  
res.end();          
}      
module.exports.controller =  controller;
module.exports.call =call;

第二种:

 //支持多个函数      
module.exports={      
controller:function(res){      
    res.write("执行controller <br>");      
    res.end();    
    },      
    call:function(res){      
    res.write("执行call <br>");      
    res.end();    
    }      

调用方式相比只支持一个函数的方式,需要将:otherfun (response);

修改成如下调用方式

otherfun.controller(response);//otherfuns.js 里的函数controller被调用

4. 模块化调用应用(面向对象)

我们建立一个User对象

 //--------------User.js--------------  
function  User(id,name,age){
    this.id=id;//属性
    this.name=name;//属性
    this.age=age;//属性
    this.enter=function(){//方法
        console.log("进入图书馆");
    }
}
module.exports  =  User;

再建一个Teacher对象

 //-------------------models/Teacher.js---------  
var  User  =  require('./User');
function  Teacher(id,name,age){
    User.apply(this,[id,name,age]);//继承User
    this.teach=function(res){//自有方法
        res.write(this.name+"老师讲课");
    }
}
module.exports    =    Teacher;

Teacher继承User对象,有id,name,age属性,除了enter方法外还定义了teach方法。

apply可以执行多次,所以可以继承多个对象,不如其他语言的面向对象更加严格。

在server端可以如下调用teacher。Teacher(1,'李四',30),初始化了一个实例对象

 //----------------------n3_modalcall.js-------------  
var http = require('http');    
var  Teacher  =  require('./models/Teacher');
http.createServer(function (request, response)        {        
        response.writeHead(200, {'Content-Type': 'text/html;  charset=utf-8'});        
        if(request.url!=="/favicon.ico"){        //清除第2此访问
          teacher  =  new  Teacher(1,'李四',30);
          teacher.teach(response);
          response.end('');    
    }
}).listen(8000);        
console.log('Server running  at  http://127.0.0.1:8000/');

我们运行:node 3_modelCall,打开浏览器

5. 用函数名的字符串调用

otherfuns.js内容如下

 //支持多个函数      
module.exports={      
controller:function(res){      
    res.write("执行controller <br>");         
    },      
    call:function(res){      
    res.write("执行call <br>");       
    }      

再server里通过字符串调用otherfuns里的函数

 //-----------------用函数名的字符串调用------------------
var  http  =  require('http');    
var  otherfun  =  require("./models/otherfuns.js");
http.createServer(function (request,response)  {        
        response.writeHead(200,{'Content-Type':  'text/html; charset=utf-8'});        
        if(request.url!=="/favicon.ico"){ 
          //-------用字符串调用对应的函数---
          funname  =  'controller';
          otherfun[funname](response);
          otherfun['call'](response);
          response.end();    
    }
}).listen(8000);        
console.log('Server running  at  http://127.0.0.1:8000/');

nodejs进阶(2)—函数模块调用的更多相关文章

  1. NodeJS学习笔记 进阶 (12)Nodejs进阶:crypto模块之理论篇

    个人总结:读完这篇文章需要30分钟,这篇文章讲解了使用Node处理加密算法的基础. 摘选自网络 Nodejs进阶:crypto模块之理论篇 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速 ...

  2. Nodejs进阶:核心模块net入门与实例讲解

    模块概览 net模块是同样是nodejs的核心模块.在http模块概览里提到,http.Server继承了net.Server,此外,http客户端与http服务端的通信均依赖于socket(net. ...

  3. Nodejs进阶:核心模块https 之 如何优雅的访问12306

    本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 这个模块的重要性,基本不用强调了.在网络安全问题日益严 ...

  4. Nodejs进阶:crypto模块中你需要掌握的安全基础

    本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址. 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速度增长.同时,各类网络安全问题层出不穷.在信 ...

  5. Nodejs进阶:核心模块Buffer常用API使用总结

    本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 Buffer是node的核心模块,开发者可以利用它来处 ...

  6. nodejs进阶(3)—路由处理

    1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...

  7. nodejs进阶(1)—输出hello world

    下面将带领大家一步步学习nodejs,知道怎么使用nodejs搭建服务器,响应get/post请求,连接数据库等. 搭建服务器页面输出hello world var  http  =  require ...

  8. NodeJS学习笔记 进阶 (13)Nodejs进阶:5分钟入门非对称加密用法

    个人总结:读完这篇文章需要5分钟,这篇文章讲解了Node.js非对称加密算法的实现. 摘录自网络 地址: https://github.com/chyingp/nodejs-learning-guid ...

  9. Python3基础(4)匿名函数、装饰器、生成器、迭代器、内置函数、json&pickle序列化、软件目录开发规范、不同目录间模块调用

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

随机推荐

  1. 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信

    接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...

  2. 多线程爬坑之路-Thread和Runable源码解析

    多线程:(百度百科借一波定义) 多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提 ...

  3. Linux之搭建自己的根文件系统

    Hi!大家好,我是CrazyCatJack.又和大家见面了.今天给大家带来的是构建Linux下的根文件系统.希望大家看过之后都能构建出符合自己需求的根文件系统^_^ 1.内容概述 1.构造过程 今天给 ...

  4. wordpress优化之结合prism.js为编辑器自定义按钮转化代码

    原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...

  5. Hibernate中事务的隔离级别设置

    Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下

  6. Set up VLAN (802.1q) tagging on a network interface?

    SOLUTION VERIFIED October 13 2015 KB39674 KB741413 environment Red Hat Enterprise Linux 4 Red Hat En ...

  7. Windows cmd 长时间不输出新内容 直到按下ctrl + c 取消或者回车的解决办法

    换了一台新电脑, 在使用 ant 拷贝大量文件的时候 cmd 窗口过了很久没有继续输出新的内容,远远超过平时的耗时, 以为已经卡死 按下 ctrl + c 取消, 这时并没有取消, 而是输出了新内容, ...

  8. Selenium的PO模式(Page Object Model)[python版]

     Page Object Model 简称POM  普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...

  9. SpringMvc中的数据校验

    SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...

  10. python_单元测试unittest

    Python自带一个单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 步骤1:首先引入unittest模块--import un ...