nodejs进阶(2)—函数模块调用
函数调用
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)—函数模块调用的更多相关文章
- NodeJS学习笔记 进阶 (12)Nodejs进阶:crypto模块之理论篇
个人总结:读完这篇文章需要30分钟,这篇文章讲解了使用Node处理加密算法的基础. 摘选自网络 Nodejs进阶:crypto模块之理论篇 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速 ...
- Nodejs进阶:核心模块net入门与实例讲解
模块概览 net模块是同样是nodejs的核心模块.在http模块概览里提到,http.Server继承了net.Server,此外,http客户端与http服务端的通信均依赖于socket(net. ...
- Nodejs进阶:核心模块https 之 如何优雅的访问12306
本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 这个模块的重要性,基本不用强调了.在网络安全问题日益严 ...
- Nodejs进阶:crypto模块中你需要掌握的安全基础
本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址. 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速度增长.同时,各类网络安全问题层出不穷.在信 ...
- Nodejs进阶:核心模块Buffer常用API使用总结
本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 Buffer是node的核心模块,开发者可以利用它来处 ...
- nodejs进阶(3)—路由处理
1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...
- nodejs进阶(1)—输出hello world
下面将带领大家一步步学习nodejs,知道怎么使用nodejs搭建服务器,响应get/post请求,连接数据库等. 搭建服务器页面输出hello world var http = require ...
- NodeJS学习笔记 进阶 (13)Nodejs进阶:5分钟入门非对称加密用法
个人总结:读完这篇文章需要5分钟,这篇文章讲解了Node.js非对称加密算法的实现. 摘录自网络 地址: https://github.com/chyingp/nodejs-learning-guid ...
- Python3基础(4)匿名函数、装饰器、生成器、迭代器、内置函数、json&pickle序列化、软件目录开发规范、不同目录间模块调用
---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...
随机推荐
- Azkaban源码学习笔记
1. ConnectorParams (interface): 定义了各种常量参数,没有声明任何方法. 2. ExecutorServlet.java类 2.1 继承类HttpServlet和接口 ...
- Dapper扩展之~~~Dapper.Contrib
平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...
- Java 8五大主要功能为开发者提供了哪些便利?
两年前当Java 8发布后,立即受到了业界的欢迎,因为它大大提高了Java的性能.它独特的卖点是,顾及了编程语言的每一个方面,包括JVM(Java虚拟机)和编译器,并且改良了其它帮助系统. Java是 ...
- shell变量
定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...
- Python标准库--typing
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...
- pt-mext
pt-mext实现的功能比较简单,就是将mysqladmin输出的多次迭代的相同status变量值放到同一行输出. 参数很少,除了--help和--version外,只有一个--relative参数 ...
- 在知乎上看到 Web Socket这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错
在知乎上看到这篇文章讲得确实挺好,从头看到尾都非常形象生动,一口气看完,没有半点模糊,非常不错,所以推荐给大家,非常值得一读. 作者:Ovear链接:https://www.zhihu.com/que ...
- CSS 3学习——边框
在CSS 3中可以设置边框圆角.边框阴影和边框图像,分别通过border-radius.border-image和box-shadow属性设置. 边框圆角 border-radius属性是以下4个属性 ...
- 中国CIO最关心的八大问题(下)
中国CIO最关心的八大问题(下) 从调研数据还可以看出,在企业级IT建设与投资上,CIO们并非是一群狂热的技术信徒,他们更多的是从企业发展阶段.信息化程度.技术成熟度.ROI等方面进行综合评估. 五. ...
- 拦截UIViewController的popViewController事件
实现拦截UIViewController的pop操作有两种方式: 自定义实现返回按钮,即设置UIBarButtonItem来实现自定义的返回操作. 创建UINavigatonController的Ca ...