Node.js 应用是由哪几部分组成的:
更多方法如.once见网站
常用的事件有:
Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。
一个文件就是一个模块,可以是js\json\c++扩展
exports 和 module.exports 的使用
如果要对外暴露对象中的属性或方法,就用 exports.name1=function(){} 就行,main文件中require导入模块a后a.name1调用;要暴露整个对象(类似class,包含了很多属性和方法),就用 module.exports=name1,main文件中require导入模块a后,new实例,然后调用
// hello.js
exports.world = function() {
console.log('Hello World! lsq');
}
//hello-object.js 有时候我们只是想把一个对象封装到模块中
function Hello2() {
var name;
this.setName = function(thyName) {
name = thyName;
};
this.sayHello = function() {
console.log('Hello ' + name);
};
};
module.exports = Hello2;
调用
// require这个hello模块,然后就可以调用其方法world
// node main.js可打印结果
var hello = require('./hello');
hello.world();
// 也可以require hello2这个模块(里面有一个对象,好几个方法),调用其方法。
var Hello2 = require('./hello-object');
hello2 = new Hello2();
hello2.setName('BYVoid');
hello2.sayHello();
// 模块接口的唯一变化是使用 module.exports = Hello 代替了exports.world = function(){}。 在外部引用该模块时,其接口对象就是要输出的 Hello 对象本身,而不是原先的 exports。
server1.start1(router1.route);
全局对象global,根本作用是作为全局变量的宿主
全局变量:(两条下划线)
1、__filename 表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径
2、__dirname 表示当前执行脚本所在的目录
3、setTimeout(cb, ms) 全局函数在指定的毫秒(ms)数后执行指定函数(cb)。:setTimeout() 只执行一次指定函数。
4、clearTimeout( t ) 全局函数用于停止一个之前通过 setTimeout() 创建的定时器。 参数 t 是通过 setTimeout() 函数创建的定时器。
5、setInterval(cb, ms) 全局函数在指定的毫秒(ms)数后执行指定函数(cb)。
返回一个代表定时器的句柄值。可以使用 clearInterval(t) 函数来清除定时器。
setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。
6、console方法
console.log('byvoid%diovyb', 1991); 多个参数 // byvoid1991iovyb
console.time(label)输出时间,表示计时开始。console.timeEnd(label)结束时间,表示计时结束
7、process 是一个全局变量,即 global 对象的属性。用于描述当前Node.js 进程状态的对象,提供了一个与操作系统的简单接口。
exit:当进程准备退出时触发。
beforeExit:当 node 清空事件循环,并且没有其他安排时触发这个事件。
uncaughtException:当一个异常冒泡回到事件循环,触发这个事件。
Signal 事件:当进程接收到信号时就触发
process提供了很多有用的属性,以便我们进行更好的系统交互(stdout标准输出流、stderr标准错误流,stdin标准输入流,argv一个数组,由命令行执行脚本时的各个参数组成,title进程名,pid进程号等等)
util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数。
util.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转换 为字符串的方法,通常用于调试和错误输出。它至少接受一个参数 object,即要转换的对象。
util.isArray(object) 如果给定的参数 "object" 是一个数组返回true,否则返回false。
util.isRegExp(object) 如果给定的参数 "object" 是一个正则表达式返回true,否则返回false。
util.isDate(object) 如果给定的参数 "object" 是一个日期返回true,否则返回false。
util.isError(object) 如果给定的参数 "object" 是一个错误对象返回true,否则返回false。
Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
各种方法详见官网文件模块描述: https://nodejs.org/api/fs.html#fs_file_system
异步打开文件:fs.open(path, flags[, mode], callback)
异步获取文件属性:fs.stat(path, callback) stats类下有很多方法
异步写入文件:fs.writeFile(file, data[, options], callback)
异步读取文件:fs.read(fd, buffer, offset, length, position, callback)
异步关闭文件:fs.close(fd, callback)
异步截取文件:fs.ftruncate(fd, len, callback)
异步删除文件:fs.unlink(path, callback)
创建目录:fs.mkdir(path[, options], callback)
读取目录:fs.readdir(path, callback)
删除目录:fs.rmdir(path, callback)
具体用法见网站 https://www.runoob.com/nodejs/nodejs-fs.html
os模块 提供基本的系统操作函数
path模块 提供了处理和转换文件路径的工具。
net模块 用于底层的网络通信。提供了服务端和客户端的的操作。
DNS模块 用于解析域名。
Domain模块 简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的。
web服务器:基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的网络浏览器配合。
大多数 web 服务器都支持服务端的脚本语言(php、python、ruby)等,并通过脚本语言从数据库获取数据,将结果返回给客户端浏览器。
目前最主流的三个Web服务器是Apache、Nginx、IIS。
使用node可以搭建一个服务端,处理请求;可以搭建客户端,相当于在浏览器中输入地址,向服务端发起请求,处理响应。具体的使用见demo9
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。
使用 Express 可以快速地搭建一个完整功能的网站。
具体使用,如实例、路由、静态文件见demo10,以及原网站