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
Node.js模块的更多相关文章
- 如何发布一个自定义Node.js模块到NPM(详细步骤)
咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...
- 编写原生Node.js模块
导语:当Javascript的性能需要优化,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...
- 编写原生的Node.js模块
导语:当Javascript的性能遭遇瓶颈,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...
- Node.js模块封装及使用
Node.js中也有一些功能的封装,类似C#的类库,封装成模块这样方便使用,安装之后用require()就能引入调用. 一.Node.js模块封装 1.创建一个名为censorify的文件夹 2.在c ...
- 10、Node.js模块系统
##################################################################################介绍Node.js模块系统为了让No ...
- 如何发布一个自定义Node.js模块到NPM(详细步骤,附Git使用方法)
咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...
- node.js 模块和其下载资源的镜像设置
以前安装 electron 时总是失败,然后就在淘宝镜像上下载好相应版本的文件放到用户目录来解决问题. 后来研究发现 npm 不仅可以设置 node.js 模块仓库的代理, 同样可以设置像 elect ...
- Developer - 如何自我保证Node.js模块质量
组里正在做SaaS产品,其中一些模块(Module)是Node.js实现,这里我们主要使用Node.js实现Web Server来提供服务. 在做SaaS项目之前,组里的开发模式是传统的Deverlo ...
- Node Js模块讲解
Node JS模块 所谓的Node JS模块其实就是指Node JS package,即nodejs包. 一 什么是NodeJS模块? 在说这个问题之前,我们有必要提出一个概念,即模块规范. 现阶段J ...
随机推荐
- LazyInitializationException: could not initialize proxy no session
这完全是框架设计者的锅,讲道理 无论是SSH SSM都太重了, Hibernate几乎把SQL完全封装了一遍,简单的一对多关系,如果开启LazyLoad 这样实体类会被代理,直到访问这个多方实体的属 ...
- jq分页异步刷新 ,全局刷新问题
在做分页的时候,可能点击下一页全部刷新 这样写会导致动态刷新,页面全部刷新了 $("#pageList a").click(function () { var $s = $(thi ...
- C# Winform应用程序占用内存较大解决方法整理(转)
原文:http://www.jb51.net/article/56682.htm 背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂 ...
- spring-自动加载配置文件\使用属性文件注入
在上一篇jsf环境搭建的基础上 , 加入spring框架 , 先看下目录结构 src/main/resources 这个source folder 放置web项目所需的主要配置,打包时,会自动打包到W ...
- python 测试驱动开发的简单例子
一.需求分析 需求:一个类 MyClass,有两个功能:add, sub 1.先功能设计 # myclass.py class MyClass(object): # 加法 def add(self): ...
- java之yield(),sleep(),wait()区别详解
1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...
- 0 bug 读后感
本书全名是 <0 bug- C/C++商用工程之道>,这是一本有争议的书,豆瓣链接: http://book.douban.com/subject/4149139/ ,建议有一些商用的开发 ...
- STM32-外部中断,没有硬件干扰就是快乐
一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发: 二:外部中断分组 STM32 的每一个GPIO都能配置成一个外部中断触发源,STM32 通过根据引脚的序号不同将众多中断触发源 ...
- 创业这三年¥.NET之尴尬处境
创业这三年#迈出第一步 创业这三年@各种奇遇 之前写的文章有兴趣的大家可以看看. 本来没有打算写这样一篇会遭人拍砖的文章,但是发现大家每天忙于编码,对市场环境..Net生态没有一个真实.多角度的认识, ...
- JavaScript函数劫持
一.为什么我会写这篇文章 这篇文章其实是在一个偶然的机会下发现了居然有JavaScript劫持这种东西,虽然这种东西在平时用的比较少,而且一般实用价值不高,但是在一些特殊的情况下还是要使用到的,所以在 ...