Node.js是一个服务器端的Javascript解析器。
在node中,不同的功能组件被划分成不同的模块。
命令
全局模块的默认安装位置
npm root -g
查看全局模块的默认搜索路径
$node
>global.module.paths
事件
Nodejs采用事件驱动的方式,所有能够产生事件的对象都是事件模块中的EventEmitter类的实例。
var events = require("events");
var emitter = new events.EventEmitter();
emitter.on("myEvent", function(msg) {
console.log(msg);
});
emitter.emit("myEvent", "Hello World.");
var emitter = new events.EventEmitter();
emitter.on("myEvent", function(msg) {
console.log(msg);
});
emitter.emit("myEvent", "Hello World.");
new events.EventEmitter() 创建了一个事件触发器
addListener(event, listener) 和 on(event, listener) 这两个方法都是将一个监听器添加到指定事件的监听器数组的末尾。
once(event, listener) 这个方法为事件为添加一次性的监听器。该监听器在事件第一次触发时执行,过后将被移除。
removeListener(event, listener) 该方法用来将监听器从指定事件的监听器数组中移除出去。
emit(event, [arg1], [arg2], [...]) 方法用来产生事件。以提供的参数作为监听器函数的参数,顺序执行监听器列表中的每个监听器函数。
所有数据流都是EventEmitter的实例,因此可以产生各种不同的事件。
可读流主要会产生以下事件:
- data 当读取到流中的数据时,此事件被触发
- end 当流中没有数据可读时,此事件被触发
- error 当读取数据出现错误时,此事件被触发
- close 当流被关闭时,,此事件被触发,可是并不是所有流都会触发这个事件。(例如,一个连接进入的HTTP request流就不会触发'close'事件。)
文件系统
Node 中的 fs 模块用来对本地文件系统进行操作。使用require('fs')访问这个模块。所有的方法都提供了异步和同步两种方式。异步操作的版本都会使用一个回调方法作为最后一个参数。当操作完成的时候,该回调方法会被调用。而回调方法的第一个参数总是保留为操作时可能出现的异常。如果操作正确成功,则第一个参数的值是 null 或 undefined 。
同步操作的版本的方法名称则是在对应的异步方法之后加上一个 Sync 作为后缀。当使用异步版本时不能保证执行顺序。在繁重的任务中,使用这些函数的异步版本.同步版本会阻塞进程,直到完成处理,也就是说会暂停所有的连接.
删除文件
var fs = require('fs'); fs.unlink('./myModule.js', function (err) {
if (err) throw err;
});
网络
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(1337, "127.0.0.1");http.createServer 创建并返回一个新的web server对象,并且给服务绑定一个回调,用以处理请求。通过 http.listen() 方法就可以让该 HTTP 服务器在特定端口监听。
连接Mysql数据库
var mysql = require(‘mysql‘); var connect = mysql.createConnection({ host:‘localhost‘, user:‘root‘, password:‘1993‘, database:‘test‘, port:3306 }); connect.connect();
connection.query(selectSQL, function(err, rows, fields) {
if (err) throw err;
console.log("SELECT ==> ");
for (var i in rows) {
console.log(rows[i]);
}
});
connect.end(); //end()方法在queries都结束后执行。end()方法可以接受一个回调函数,query执行出错后,错误返回给回调函数的err参数。
connect.destory(); //不接受回调函数, 立即结束问题 Error:Cannot find module 'mysql'
1.设置全局模块根目录NODE_PATH=“E:\nodejs\node_modules”。
2.若没有设置全局模块根目录,那么执行js的目录必须有依赖的modules。
(1)直接在执行js的目录下npm install xxx。
(2)在执行js的目录下,创建package.json文件,把需要的modules加进去,然后执行npm install。
Connection Options
charset 字符集,默认为UTF8_GENERAL_CI
connectTimeout 连接超时,单位毫秒,默认不限制
multipleStatements 是否许一个query中有多个MySQL语句 ,默认为false
数据库基本操作
增
var userAddSql =
'INSERT INTO userinfo(Id,UserName,UserPass) VALUES(0,?,?)'
;
var userAddSql_Params = [
'Wilson'
,
'abcd'
];
connection.query(userAddSql,userAddSql_Params,function (err, result){});
result中包含affectedRows(受影响的行数)、insertId(插入的主键ID)。根据这些信息可以方便进行后续操作。
删改
v var userModSql =
'UPDATE userinfo SET UserName = ?,UserPass = ? WHERE Id = ?'
;
var userModSql_Params = [
'钟慰'
,
'5678'
,
1
];
connection.query(userModSql,userModSql_Params,function (err, result) {});
查
var userGetSql =
'SELECT * FROM userinfo'
;
connection.query(userGetSql,function (err, result) {});
删
var userDelSql =
'DELETE FROM userinfo'
;
connection.query(userDelSql,function (err, result) {});
常用模块和方法
加载模块
var module = require('modulename');
var module = require('./modulename.js'); 用来加载与当前js文件同一目录下的js模块。
模块中的私有属性和方法在模块以外无法访问。公共属性和公共方法的声明需要在前面加上this关键字。