每一个Node.js都是一个Node.js模块,包括JavaScript文件(.js)、JSON文本文件(.json)和二进制模块文件(.node)。

mymodul.js

  1. function Hello() {
  2. this.hello = function() {
  3. console.log('Hello');
  4. };
  5.  
  6. this.world = function() {
  7. console.log('World');
  8. };
  9. }
  10.  
  11. module.exports = Hello;

index.js

  1. var Hello = require('./mymodule');
  2.  
  3. var hello = new Hello();
  4.  
  5. hello.hello(); // >> Hello
  6. hello.world(); // >> World

包用于管理多个模块及其依赖关系,包的根目录必须包含package.json文件,是CommonJS规范用于描述包的文件

npm是包管理工具

Node.js Events模块

所有发出事件的对象都是events.EventEmitter的实例,可以通过require("events");获得event模块

test4.js

  1. var http = require('http');
  2. var server = http.createServer();
  3.  
  4. server.on('request', function(req, res) {
  5. res.writeHead(200, { 'Content-Type': 'text/plain' });
  6. res.write('hello,111');
  7. console.log('hello,111');
  8. res.end();
  9. });
  10.  
  11. server.on('request', function(req, res) {
  12. res.writeHead(200, { 'Content-Type': 'text/plain' });
  13. res.write('hello,222');
  14. console.log('hello,222');
  15. res.end();
  16. });
  17.  
  18. // 移除绑定的所有监听器
  19. server.removeAllListeners('request');
  20.  
  21. server.on('request', function(req, res) {
  22. res.writeHead(200, { 'Content-Type': 'text/plain' });
  23. res.write('hello');
  24. console.log('hello');
  25. res.end();
  26. });
  27.  
  28. server.listen(1337, '127.0.0.1');
  29. 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模块

模块中所有方法都有同步和异步两种形式

读取文件

  1. fs.readFile(filename, [options], callback)

写入内容到文件

  1. fs.writeFile(filename, data, [options], callback)

eg:

  1. var fs = require('fs'); // 引入fs模块
  2.  
  3. // 写入文件内容(如果文件不存在会创建一个文件)
  4. // 写入时会先清空文件
  5. fs.writeFile('./aa.txt', 'test test aaa',{'flag': 'a'},function(err) {
  6. if (err) {
  7. throw err;
  8. }
  9.  
  10. console.log('Saved.');
  11.  
  12. // 写入成功后读取测试
  13. fs.readFile('./aa.txt', 'utf-8', function(err, data) {
  14. if (err) {
  15. throw err;
  16. }
  17. console.log(data);
  18. });
  19. });

flag传递的值,r代表读取文件,,w代表写入文件,a代表追加写入文件

打开文件

  1. fs.open(path, flags, [mode], callback)

关闭文件

  1. fs.close(fd, [callback])

读文件

  1. fs.read(fd, buffer, offset, length, position, callback)

read.js

  1. var fs = require('fs'); // 引入fs模块
  2.  
  3. // 打开文件
  4. fs.open('./aa.txt', 'r', function(err, fd) {
  5. if (err) {
  6. throw err;
  7. }
  8. console.log('open file success.');
  9. var buffer = new Buffer(255);
  10. // 读取文件
  11. fs.read(fd, buffer, 0, 100, 0, function(err, bytesRead, buffer) {
  12. if (err) {
  13. throw err;
  14. }
  15. // 打印出buffer中存入的数据
  16. console.log(bytesRead, buffer.slice(0, bytesRead).toString());
  17.  
  18. // 关闭文件
  19. fs.close(fd);
  20. });
  21. });

写文件

  1. fs.write(fd, buffer, offset, length, position, callback)
  1. var fs = require('fs'); // 引入fs模块
  2.  
  3. // 打开文件
  4. fs.open('./bb.txt', `w`, function(err, fd) {
  5. if (err) {
  6. throw err;
  7. }
  8. console.log('open file success.');
  9. var buffer = new Buffer('hello world!!!!!!');
  10. // 读取文件
  11. fs.write(fd, buffer, 0, 10, 0, function(err, bytes, buffer) {
  12. if (err) {
  13. throw err;
  14. }
  15.  
  16. console.log('write success.');
  17. // 打印出buffer中存入的数据
  18. console.log(bytes, buffer.slice(0, bytes).toString());
  19.  
  20. // 关闭文件
  21. fs.close(fd);
  22. });
  23. });

创建目录

  1. fs.mkdir(path, [mode], callback)

mkdir.js

  1. var fs = require('fs'); // 引入fs模块
  2.  
  3. // 创建 newdir 目录
  4. fs.mkdir('./newdir', function(err) {
  5. if (err) {
  6. throw err;
  7. }
  8. console.log('make dir success.');
  9. });

读取文件目录

  1. fs.readdir(path, callback)

readdir.js

  1. var fs = require('fs'); // 引入fs模块
  2.  
  3. fs.readdir('./newdir', function(err, files) {
  4. if (err) {
  5. throw err;
  6. }
  7. // files是一个数组
  8. // 每个元素是此目录下的文件或文件夹的名称
  9. console.log(files);
  10. });
Node.js 的 http 模块

http模块主要用于创建http server服务

创建http server

  1. // 引入http模块
  2. var http = require('http');
  3.  
  4. // 创建http server
  5. http.createServer(function (req, res) {
  6. res.writeHead(200, {'Content-Type': 'text/plain'});
  7. res.end('Hello World\n');
  8. }).listen(1337, '127.0.0.1');
  9.  
  10. console.log('Server running at http://127.0.0.1:1337/');

新建一个文app件夹

server.js

  1. //
  2. // 创建http server
  3. //
  4.  
  5. // 加载所需模块
  6. var http = require('http');
  7. var url = require('url');
  8. var fs = require('fs');
  9.  
  10. // 设置ip和端口
  11. var host = '127.0.0.1',
  12. port = 8080;
  13.  
  14. // 创建http server
  15. function start(route, handle) {
  16. // 参数
  17. // route 判断url是否存在,存在则调用handle处理,不存在则返回404
  18. // handle 处理不同的url请求
  19.  
  20. // 处理request请求
  21. function onRequest(req, res) {
  22. // 使用url.parse()方法解析url
  23. // 它会把url string转化为一个object
  24. // 这样我们就可以很方便的获取url中的host、port、pathname等值了
  25. var pathname = url.parse(req.url).pathname;
  26. console.log('Request for ' + pathname + ' received.');
  27.  
  28. // 判断并处理不同url请求
  29. // 后面介绍此方法
  30. route(handle, pathname, res, req);
  31. }
  32.  
  33. // 使用http.createSserver()方法创建http server
  34. // 并传入onRequest()方法
  35. // 然后使用listen()方法监听指定地址
  36. http.createServer(onRequest).listen(port, host);
  37. console.log('Server has started and listening on ' + host + ':' + port);
  38. }
  39.  
  40. // 导出 start 方法
  41. exports.start = start;

router.js

  1. var fs = require('fs');
  2.  
  3. // 路由函数
  4. // 处理不同url的请求
  5. // 并返回相应内容
  6.  
  7. function route(handle, pathname, res, req) {
  8. console.log('About to route a request for ' + pathname);
  9.  
  10. // 判断此url是否存在特定处理函数
  11. // 存在则调用handle处理
  12. // 不存在则返回404页面
  13. if (typeof handle[pathname] === 'function') {
  14. // 后面介绍handle函数
  15. handle[pathname](res, req);
  16. } else {
  17. console.log('No request handler found for ' + pathname);
  18.  
  19. // 读取404页面
  20. // 所有页面都存放在view文件夹下
  21. var content = fs.readFileSync('./views/404.html');
  22. res.writeHead(404, { 'Content-Type': 'text/html' });
  23. res.write(content);
  24. res.end();
  25. }
  26. }
  27. // 导出 route 方法
  28. exports.route = route;

requestHandlers.js

  1. // 处理url请求
  2. var fs = require('fs');
  3. // home.html 主页
  4. function home(res) {
  5. console.log('Request handler "home" was called.');
  6.  
  7. // 读取home.html文件
  8. var content = fs.readFileSync('./views/home.html');
  9. res.writeHead(200, { 'Content-Type': 'text/html' });
  10. res.write(content);
  11. res.end();
  12. }
  13.  
  14. // about.html 关于页面
  15. function about(res) {
  16. console.log('Request handler "about" was called.');
  17.  
  18. // 读取about.html文件
  19. var content = fs.readFileSync('./views/about.html');
  20. res.write(200, { 'Content-Type': 'text/html' });
  21. res.write(content);
  22. res.end();
  23. }
  24. // 导出页面处理函数
  25. exports.home = home;
  26. exports.about = about;

main.js

  1. // 主程序
  2. // 引入server,router及requestHandler
  3. var server = require('./server');
  4. var router = require('./router');
  5. var requestHandlers = require('./requestHandlers');
  6.  
  7. // 保存url处理方法
  8. var handle = {};
  9. handle['/'] = requestHandlers.home;
  10. handle['/about'] = requestHandlers.about;
  11.  
  12. // 启动http server
  13. 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

Node.js模块的更多相关文章

  1. 如何发布一个自定义Node.js模块到NPM(详细步骤)

    咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...

  2. 编写原生Node.js模块

    导语:当Javascript的性能需要优化,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

  3. 编写原生的Node.js模块

    导语:当Javascript的性能遭遇瓶颈,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

  4. Node.js模块封装及使用

    Node.js中也有一些功能的封装,类似C#的类库,封装成模块这样方便使用,安装之后用require()就能引入调用. 一.Node.js模块封装 1.创建一个名为censorify的文件夹 2.在c ...

  5. 10、Node.js模块系统

    ##################################################################################介绍Node.js模块系统为了让No ...

  6. 如何发布一个自定义Node.js模块到NPM(详细步骤,附Git使用方法)

    咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...

  7. node.js 模块和其下载资源的镜像设置

    以前安装 electron 时总是失败,然后就在淘宝镜像上下载好相应版本的文件放到用户目录来解决问题. 后来研究发现 npm 不仅可以设置 node.js 模块仓库的代理, 同样可以设置像 elect ...

  8. Developer - 如何自我保证Node.js模块质量

    组里正在做SaaS产品,其中一些模块(Module)是Node.js实现,这里我们主要使用Node.js实现Web Server来提供服务. 在做SaaS项目之前,组里的开发模式是传统的Deverlo ...

  9. Node Js模块讲解

    Node JS模块 所谓的Node JS模块其实就是指Node JS package,即nodejs包. 一 什么是NodeJS模块? 在说这个问题之前,我们有必要提出一个概念,即模块规范. 现阶段J ...

随机推荐

  1. 使用javascript对密码进行有密码强度提示的验证

    好些网站的注册功能中,都有对密码进行验证并且还有强度提示.下面就来实现这种效果.密码强度说明:密码强度:弱——纯数字,纯字母,纯符号密码强度:中——数字,字母,符号任意两种的组合密码强度:强——数字, ...

  2. 第三方登录 (faceBook )

    1.iOS 第三方登录(Facebook,Twitter...)http://www.jianshu.com/p/f64d5ad2ef2a

  3. PHP命令行模式

    <?php error_reporting(E_ALL); header('Content-Type:text/plain;charset=utf-8'); interface CommandA ...

  4. oracle小知识总结

    1,表列的五种约束 not null, unique,primary key, foreign key, check 2,权限分配 grant 权限 on 表 to 用户 3,表和视图的区别 视图是一 ...

  5. java多线程系类:基础篇:02常用的实现多线程的两种方式

    本章,我们学习"常用的实现多线程的2种方式":Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多 ...

  6. PRML读书会第十章 Approximate Inference(近似推断,变分推断,KL散度,平均场, Mean Field )

    主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:02:04 我们在前面看到,概率推断的核心任务就是计算某分布下的某个函数的期望.或者计算边缘概率分布.条件 ...

  7. (转) RSA算法原理(一)

    最近用到了RSA加密算法,虽然有现成的,但是想看看它的原理,翻到此文,感觉写得很好,通俗易懂,转了.   作者: 阮一峰 日期: 2013年6月27日 如果你问我,哪一种算法最重要? 我可能会回答&q ...

  8. 使用Redis做预定库存缓存功能

    最近在自己的工作中,把其中一个PHP项目的缓存从以前的APC缓存逐渐切换到Redis中,并且根据Redis所支持的数据结构做了库存维护功能.缓存是在业务层做的,准确讲应该是在MVC模型中Model的O ...

  9. Code Review 五问五答

    Code Review 是什么? Code Review即代码审查,程序猿相互审核对方的代码. Code Review能获得什么好处? 提高代码可维护性 你写的代码不再只有编译器看了,你得写出审核人能 ...

  10. nios II--实验2——led硬件部分

    Led 硬件开发 新建原理图 1.打开Quartus II 11.0,新建一个工程,File -> New Project Wizard…,忽略Introduction,之间单击 Next> ...