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文件,没有找到就到网站的根目录去找