序言
Nodejs 启程啦,做了些纸上的笔记,一开始是为了加深理解,隔天再翻看下当时温习。不经觉得过些时间或许就不会到本本上找了,固然还是选择在这里记录下比较好,尽管速度会慢下来的说。实际上目前也仅仅只是跟着语法和基础学,具体要怎么实践好还真是一点头绪都木有呢!
[ TOP ]
1. 全局对象与全局变量
Global,JavaScript 中的一个特殊对象,旗下所有属性可在程序中的任意位置接受访问,即全局变量。global 为全局变量的宿主,作为全局变量需满足以下条件:
- 模块文件最外层定义的变量
- 作为全局对象的属性
- 隐私定义的变量(未定义直接赋值的变量)
全局变量 | 作用 |
---|---|
__filename | 输出当前文件/模块文件所在位置的据对路径 |
__dirname | 输出当前文件/模块文件说在位置的目录 |
setTimeout(cb, ms) | 在指定时间毫秒(ms)数后执行一次函数(cb) |
clearTimeout(t) | 停止 setTimeout() 创建的定时器(t) |
setInterval(cb, ms) | 每间隔指定时间毫秒(ms)数后执行函数(cb) |
clearInterval(t) | 停止 setInterval() 创建的定时器(t) |
console | 控制台字符输出 |
process | 描述当前 Node.js 进程状态的对象;方便与控制系统的交互 |
2. 常用工具
util 提供常用函数,作用于弥补 JavaScript 的功能过于精简的不足。(对 JavaScript 并没有一个很熟悉的概念,所以教程上这么说我个人自然觉得还是挺懵逼的)
工具函数 | 作用 |
---|---|
inherits(constructor, superConstructor) | 实现对象间原型继承的函数(仅原型中定义的函数) |
inspect(object,[showHidden],[depth,[colors]]) | 将任意对象转换为字符串 |
isArray(object) | 判断对象是否为数组(集合不属于数组) |
isRegExp(objecy) | 判断对象是否为正则表达式 |
isDate(object) | 判断对象是否为日期(Date() without ‘new’ returns a String) |
isError(object) | 判断是否为错误对象 |
3. 创建 Web 服务器
Web 服务器指的是驻留与因特网上某种类型计算机的程序,Web 服务器的基本功能就是提供 Web 信息浏览服务。
var http = require('http');
var fs = require('fs');
var url = require('url');
// 创建服务器
http.createServer(function(request, response){
// 解析请求,包括文件名
var pathname = url.parse(request.url).pathname;
// 从文件系统总读取请求的文件内容
fs.readFile(pathname.substr(1), function(err, data){
if(err){
console.log(err);
response.writeHead(404,{'Content-Type': 'text/html'});
}else{
response.writeHead(200,{'Content-Type': 'text/html'});
response.write(data.toString());
}
// 发送文件内容
response.end();
});
}).listen(8081);
4. Express 框架(重点)
- 可设置中间件来响应 HTTP 请求
- 定义路由表用于执行不同的 HTPP 请求动作
- 通过向模板传递参数来动态渲染 HTML 页面
这里主要抓点网络请求 get/post 的实现以及文件的上传,故取个综和性的栗子(静态环境下的上传文件表单内容):
<html>
<body>
<title>表单文件上传:</title>
<h3>选择一个文件上传:</h3>
<form action="/file_upload" method="POST" enctype="multipart/form-data">
<input type="file" name="image" size="50"><br>
<input type="submit" value="上传文件">
</form>
</body>
</html>
var express = require('express');
var app = express();
var fs = require('fs');
var bodyParser = require('body-parser');
var multer = require('multer');
var cookieParser = require('cookie-parser');
app.use(express.static('public'));
app.use(bodyParser.urlencoded({extended: false}));
app.use(multer({dest:'/tmp/'}).array('image'));
app.use(cookieParser());
app.get('/inputFile.htm', function(req,res){
res.sendFile(__dirname + "/" + "inputFile.htm");
});
app.post('/file_upload', function(req, res){
console.log(req.files[0]);
console.log("Cookies: ", req.cookies);
var des_file = __dirname + "/" + req.files[0].originalname;
fs.readFile(req.files[0].path, function(err, data){
fs.writeFile(des_file, data, function(err){
if(err){
console.log(err);
}else{
response = {
message:'File upload successfully',
filename:req.files[0].originalname
};
}
console.log(response);
res.end(JSON.stringify(response));
});
});
});
var server = app.listen(8081, function(){
var host = server.address().address
var port = server.address().port
console.log("应用实例,访问地址 http://%s:%s", host, port);
});
5. REST 架构
方法 | 作用 |
---|---|
GET | 用户获取数据 |
PUT | 用于更新或添加数据 |
DELETE | 用户删除数据 |
POST | 用于添加数据 |
5.1 RESTful 基于 REST 架构的 WebService
{
"user1" : {
"name" : "mahesh",
"password" : "password1",
"profession" : "teacher",
"id": 1
},
"user2" : {
"name" : "suresh",
"password" : "password2",
"profession" : "librarian",
"id": 2
},
"user3" : {
"name" : "ramesh",
"password" : "password3",
"profession" : "clerk",
"id": 3
}
}
URI | HTTP 方法 | 发送内容 | 结果 |
---|---|---|---|
listUsers | GET | 空 | 显示所有用户列表 |
addUser | POST | JSON 字符串 | 添加新用户 |
deleteUser/:id | DELETE | JSON 字符串 | 删除用户 |
:id | GET | 空 | 显示用户详细信息 |
var express = require('express');
var app = express();
var fs = require('fs');
// 查看用户列表
app.get('/listUsers', function(req, res){
fs.readFile(__dirname + "/" + "users.json", 'utf8', function(err, data){
if(err){
console.log(err);
} else {
console.log(data);
res.end(data);
}
});
});
// 新增用户数据
var user = {
"user4" : {
"name" : "gzejia",
"password" : "pwd",
"profession" : "student",
"id": 4
}
}
app.get('/addUser', function (req, res) {
fs.readFile(__dirname + "/" + "users.json", 'utf8', function (err, data) {
data = JSON.parse(data);
data["user4"] = user["user4"];
console.log(data);
res.end(JSON.stringify(data));
});
});
// 查看指定用户信息
app.get('/:id', function(req, res){
fs.readFile(__dirname + "/" + "users.json", 'utf8', function(err, data){
data = JSON.parse(data);
var user = data["user" + req.params.id];
console.log(user);
res.end(JSON.stringify(user));
});
});
// 删除指定用户
app.get('/deleteUser/:id', function(req, res){
fs.readFile(__dirname + "/" + "users.json", 'utf8', function(err, data){
data = JSON.parse(data);
delete data["users" + req.params.id];
console.log(data);
res.end(JSON.stringify(data));
});
});
var server = app.listen(8081, function(){
var host = server.address().address
var port = server.address().port
console.log("应用实例,访问地址为 http://%s:%s", host, port);
});
6. 多进程 child_process
方法 | 作用 | 使用语法 |
---|---|---|
exec | 使用子进程执行命令,缓存子进程的输出吗并将子进程的输出以回调函数参数的形式返回 | child_process.exec(command[, options], callback) |
spawn | 使用指定的命令行参数创建新进程 | child_process.spawn(command[, args][, options]) |
fork | spawn() 的特殊形式,用于在子进程中运行的模块。与之不同的是 fork 会在父进程与子进程之间建立一个通信管道,用于进程之间的通信 | child_process.fork(modulePath[, args][, options]) |
7. JXcore 支持多线程的 Node.js 发行版
8. 对接 MySQL 数据库管理
8.1 数据库的连接
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',// 主机地址
user : 'root',// 用户名
password : '123456',// 密码
database : 'test'// 数据库名
});
connection.connect();
// 各种数据操作
connection.end();
8.2 数据库连接池
var mysql = require('mysql');
var pool=mysql.createPool({
host: 'localhost',
user: 'root',
password: '123456',
port: '3306',
database: 'test,
connectionLimit: 10 // 最大连接数,默认为10
});
pool.getConnection(function(error, connection){
// 各种数据操作
});
// 关闭所有数据连接(可不关闭)
pool.end();
8.3 数据操作
操作名称 | 具体实现 |
---|---|
查询 | connection.query(‘selectSql’, function(error, result){}); |
插入 | connection.query(‘addSql’, ‘addParams’, function(error, result){}); |
更新 | connection.query(‘updateSql’, ‘updateParams’, function(error, result){}); |
删除 | connection.query(‘delSql’, function(error, result){}); |