node学习笔记
npm
1、npm安装
npm install 模块名
在代码中只要通过
var 模块名 = require(‘模块名’);
使用就行
2、全局安装与本地安装
npm install express # 本地安装
放在./node_modules下,可通过require来引入
npm install express -g # 全局安装
放在/usr/local或node的安装目录中
3、Package.json 属性说明
name - 包名。
version - 包的版本号。
description - 包的描述。
homepage - 包的官网 url 。
author - 包的作者姓名。
contributors - 包的其他贡献者姓名。
dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
main - main 字段指定了程序的主入口文件,require(‘moduleName’) 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
keywords - 关键字
4、卸载
npm uninstall 模块名
5、版本号
语义版本号分为X.Y.Z三位,分别代表主版本号、次版本号和补丁版本号
如果只是修复bug,需要更新Z位。
如果是新增了功能,但是向下兼容,需要更新Y位。
如果有大变动,向下不兼容,需要更新X位。
6、安装淘宝镜像cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
安装命令使用cnpm 快一些
观察者模式待补充
事件驱动
// 引入 events 模块
var events = require(‘events’);
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();
// 绑定事件及事件的处理程序
eventEmitter.on(‘eventName’, eventHandler);
// 触发事件
eventEmitter.emit(‘eventName’);
example:
// 使用匿名函数绑定 data_received 事件
eventEmitter.on(‘data_received’, function(){
console.log(‘数据接收成功。’);
});
EventEmitter类
-JavaScript 的对象机制是基于原型的,支持部分多重继承JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
Buffer类
-JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
const buf = Buffer.from(‘stirng’, ‘ascii’);
//转十六进制
console.log(buf.toString(‘hex’));
//写入 Node 缓冲区
buf.write(string[, offset[, length]][, encoding])
参数描述
string - 写入缓冲区的字符串。
offset - 缓冲区开始写入的索引值,默认为 0 。
length - 写入的字节数,默认为 buffer.length
encoding - 使用的编码。默认为 ‘utf8’ 。
转成JSON对象
-buf.toJSON()
缓冲区合并
-Buffer.concat(list[, totalLength])
缓冲区比较
-buf.compare(otherBuffer);
缓冲区裁剪
-buf.slice([start[, end]])
缓冲区长度
-buf.length;
Stream接口
分类
Readable - 可读操作。
Writable - 可写操作。
Duplex - 可读可写操作.
Transform - 操作被写入数据,然后读出结果。
读写流
var fs = require(“fs”);
// 创建一个可读流
var readerStream = fs.createReadStream(‘input.txt’);
// 创建一个可写流
var writerStream = fs.createWriteStream(‘output.txt’);
// 管道读写操作
// 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
readerStream.pipe(writerStream);
模版系统
Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。
封装一个对象到模块中
module.exports = function() {
// …
}
加载顺序
从文件模块缓存中加载->从原生模块加载->从文件加载
函数
node.js中可以把函数作为一个参数
function execute(someFunction, value) {
someFunction(value);
}
execute(function(word){ console.log(word) }, “Hello”);
全局对象与全局变量
1、__filename
2、__dirname
3、setTimeout(cb,ms)
4、clearTimeout(t)
5、setInterval(cb,ms)
6、console
7、process
Util
util 是一个Node.js 核心模块,提供常用函数的集合
const util = require(‘util’);
文件系统
-打开文件
fs.open(path, flags[, mode], callback)
-获取文件
fs.stat(path, callback)
-读取文件
fs.read(fd, buffer, offset, length, position, callback)
-写入文件
fs.writeFile(file, data[, options], callback)
-关闭文件
fs.close(fd, callback)
获取URL参数
// 解析 url 参数
var params = url.parse(req.url, true).query;
Express框架
1、安装
cnpm install express --save
2、请求和响应
Express 应用使用回调函数的参数: request 和 response 对象来处理请求和响应的数据。
Request对象
-req.app
-req.baseUrl
-req.hostname
-req.params
-req.path
-req.query
-req.route
-req.get()
Response对象
-res.app
-res.append()
-res.cookie(name, value[, option])
-res.get()
-res.json()
-res.send()
-res.status()
3、路由
var express = require(‘express’);
var app = express();
// GET 请求
app.get(’/’, function (req, res) {
console.log(“主页 GET 请求”);
res.send(‘Hello GET’);
})
// POST 请求
app.post(’/’, function (req, res) {
console.log(“主页 POST 请求”);
res.send(‘Hello POST’);
})
HTTP 方法
以下为 REST 基本架构的四个方法:
GET - 用于获取数据。
PUT - 用于更新或添加数据。
DELETE - 用于删除数据。
POST - 用于添加数据。
连接MySql
var mysql = require(‘mysql’);
var connection = mysql.createConnection({
host : ‘localhost’,
user : ‘root’,
password : ‘123456’,
port: ‘3306’,
database: ‘test’
});
connection.connect();
数据库操作CURD
var sql = ‘SELECT * FROM websites’;
//查
connection.query(sql,function (err, result) {
if(err){
console.log(’[SELECT ERROR] - ',err.message);
return;
}
});
connection.end();
增删改查相似,在sql处填写sql的具体语句传入MySql数据库