Node.js模块
每一个Node.js都是一个Node.js模块,包括JavaScript文件(.js)、JSON文本文件(.json)和二进制模块文件(.node)。
mymodul.js
function Hello() { this.hello = function() { console.log('Hello'); }; this.world = function() { console.log('World'); }; } module.exports = Hello;
index.js
var Hello = require('./mymodule'); var hello = new Hello(); hello.hello(); // >> Hello hello.world(); // >> World
包用于管理多个模块及其依赖关系,包的根目录必须包含package.json
文件,是CommonJS规范用于描述包的文件
npm是包管理工具
Node.js Events模块
所有发出事件的对象都是events.EventEmitter
的实例,可以通过require("events");
获得event
模块
test4.js
var http = require('http'); var server = http.createServer(); server.on('request', function(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write('hello,111'); console.log('hello,111'); res.end(); }); server.on('request', function(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write('hello,222'); console.log('hello,222'); res.end(); }); // 移除绑定的所有监听器 server.removeAllListeners('request'); server.on('request', function(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write('hello'); console.log('hello'); res.end(); }); server.listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/');
执行node test.js
在地址栏输入127.0.0.1:1337,即可看到页面上打印出了“hello”字样,说明前面的监听器被移除了,都没有执行,所以没有显示
console界面也只会输出'hello'字样
Node.js fs 模块
使用require('fs')
载入fs模块
模块中所有方法都有同步和异步两种形式
读取文件
fs.readFile(filename, [options], callback)
写入内容到文件
fs.writeFile(filename, data, [options], callback)
eg:
var fs = require('fs'); // 引入fs模块
// 写入文件内容(如果文件不存在会创建一个文件)
// 写入时会先清空文件
fs.writeFile('./aa.txt', 'test test aaa',{'flag': 'a'},function(err) {
if (err) {
throw err;
}
console.log('Saved.');
// 写入成功后读取测试
fs.readFile('./aa.txt', 'utf-8', function(err, data) {
if (err) {
throw err;
}
console.log(data);
});
});
flag
传递的值,r
代表读取文件,,w
代表写入文件,a
代表追加写入文件
打开文件
fs.open(path, flags, [mode], callback)
关闭文件
fs.close(fd, [callback])
读文件
fs.read(fd, buffer, offset, length, position, callback)
read.js
var fs = require('fs'); // 引入fs模块 // 打开文件 fs.open('./aa.txt', 'r', function(err, fd) { if (err) { throw err; } console.log('open file success.'); var buffer = new Buffer(255); // 读取文件 fs.read(fd, buffer, 0, 100, 0, function(err, bytesRead, buffer) { if (err) { throw err; } // 打印出buffer中存入的数据 console.log(bytesRead, buffer.slice(0, bytesRead).toString()); // 关闭文件 fs.close(fd); }); });
写文件
fs.write(fd, buffer, offset, length, position, callback)
var fs = require('fs'); // 引入fs模块 // 打开文件 fs.open('./bb.txt', `w`, function(err, fd) { if (err) { throw err; } console.log('open file success.'); var buffer = new Buffer('hello world!!!!!!'); // 读取文件 fs.write(fd, buffer, 0, 10, 0, function(err, bytes, buffer) { if (err) { throw err; } console.log('write success.'); // 打印出buffer中存入的数据 console.log(bytes, buffer.slice(0, bytes).toString()); // 关闭文件 fs.close(fd); }); });
创建目录
fs.mkdir(path, [mode], callback)
mkdir.js
var fs = require('fs'); // 引入fs模块 // 创建 newdir 目录 fs.mkdir('./newdir', function(err) { if (err) { throw err; } console.log('make dir success.'); });
读取文件目录
fs.readdir(path, callback)
readdir.js
var fs = require('fs'); // 引入fs模块 fs.readdir('./newdir', function(err, files) { if (err) { throw err; } // files是一个数组 // 每个元素是此目录下的文件或文件夹的名称 console.log(files); });
Node.js 的 http 模块
http模块主要用于创建http server服务
创建http server
// 引入http模块 var http = require('http'); // 创建http server http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/');
新建一个文app件夹
server.js
// // 创建http server // // 加载所需模块 var http = require('http'); var url = require('url'); var fs = require('fs'); // 设置ip和端口 var host = '127.0.0.1', port = 8080; // 创建http server function start(route, handle) { // 参数 // route 判断url是否存在,存在则调用handle处理,不存在则返回404 // handle 处理不同的url请求 // 处理request请求 function onRequest(req, res) { // 使用url.parse()方法解析url // 它会把url string转化为一个object // 这样我们就可以很方便的获取url中的host、port、pathname等值了 var pathname = url.parse(req.url).pathname; console.log('Request for ' + pathname + ' received.'); // 判断并处理不同url请求 // 后面介绍此方法 route(handle, pathname, res, req); } // 使用http.createSserver()方法创建http server // 并传入onRequest()方法 // 然后使用listen()方法监听指定地址 http.createServer(onRequest).listen(port, host); console.log('Server has started and listening on ' + host + ':' + port); } // 导出 start 方法 exports.start = start;
router.js
var fs = require('fs'); // 路由函数 // 处理不同url的请求 // 并返回相应内容 function route(handle, pathname, res, req) { console.log('About to route a request for ' + pathname); // 判断此url是否存在特定处理函数 // 存在则调用handle处理 // 不存在则返回404页面 if (typeof handle[pathname] === 'function') { // 后面介绍handle函数 handle[pathname](res, req); } else { console.log('No request handler found for ' + pathname); // 读取404页面 // 所有页面都存放在view文件夹下 var content = fs.readFileSync('./views/404.html'); res.writeHead(404, { 'Content-Type': 'text/html' }); res.write(content); res.end(); } } // 导出 route 方法 exports.route = route;
requestHandlers.js
// 处理url请求 var fs = require('fs'); // home.html 主页 function home(res) { console.log('Request handler "home" was called.'); // 读取home.html文件 var content = fs.readFileSync('./views/home.html'); res.writeHead(200, { 'Content-Type': 'text/html' }); res.write(content); res.end(); } // about.html 关于页面 function about(res) { console.log('Request handler "about" was called.'); // 读取about.html文件 var content = fs.readFileSync('./views/about.html'); res.write(200, { 'Content-Type': 'text/html' }); res.write(content); res.end(); } // 导出页面处理函数 exports.home = home; exports.about = about;
main.js
// 主程序 // 引入server,router及requestHandler var server = require('./server'); var router = require('./router'); var requestHandlers = require('./requestHandlers'); // 保存url处理方法 var handle = {}; handle['/'] = requestHandlers.home; handle['/about'] = requestHandlers.about; // 启动http server server.start(router.route, handle);
在app文件夹中新建views文件夹,在views文件夹中,新建home.html
文件、about.html
文件和404.html
文件
执行node main.js
访问http://127.0.0.1:8080,显示home.html页
访问http://127.0.0.1:8080/about,显示about.html页
访问http://127.0.0.1:8080/,的其他页面,显示404.html