一、安装检测
node检测:node -v;npm检测:npm -v;(有时候需要安装git ,安装检测:git -v)
二、代码执行
通过控制台进入到文件所在目录,node+空格+文件名
注:跳转文件夹:cd D:/web/node/project/study/model
测试工具:如果你想修改代码后能直接刷新查看效果,可以使用supervisor
安装supervisor:npm install -g supervisor;
使用:supervisor 文件名;
特点:会持续执行,代码更新后,会重新编译执行无需再次操控控制台开启服务。
三、内容目录
1.创建http服务器(server.js)
2.将需要的模块创建成其他页面可以引入的模块(model)
a、进入的入口(引入模块)(index.js)
b、服务器模块(server.js)
c、路由模块(route.js)
d、事件流(requestHandlers.js)
3.事件模块(event.js)
4.文件系统(fs.js)
5.node与前台链接(做接口)(connectHtml文件夹)
四、工作流
node开启index.js进入项目,执行各个模块,让各个模块进行链接
先开启服务器,
在服务器中请求路由,
路由读取请求,将结果分发给事件流,
事件流中进行事件处理,返回处理结果,
路由来接收后返回给服务器
服务器在传给前台
五、Express 是一个简洁而灵活的 node.js Web应用框架
1.检测是否安装:express --version;
如果没有安装:在cmd(跳转到node文件夹)执行:npm install -g express 和 npm install -g express-generator
上面的命令在本地node_modules目录保存安装,并创建一个目录express在node_modules里边。还有,应该使用express安装以下几个重要的模块:
body-parser :这是一个Node.js中间件处理JSON,Raw,文本和URL编码的表单数据(npm install body-parser --save)
cookie-parser : 解析Cookie头和填充req.cookies通过cookie名字键控对象(npm install cookie-parser --save)
multer : 这是一个Node.js的中间件处理multipart/form-data(npm install multer --save)
2.具体安装流程
a.创建package.json文件(放到项目文件夹中)
{
"name": "Your Application Name",
"description": "Your Description",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "3.x"
}
}
b.在项目文件夹中执行:npm install
c.替换服务器代码
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('Hello World\n');
});
app.get('/:word', function(req, res){
var w = req.params.word;
res.send(w);
});
app.listen(3000);
console.log('Listening on port 3000...');
d.期待服务查看结果
六、深入学习
1.模块和包
a.通过exports和require进行模块开发
1>.在第一个hello.js文件中编写一个name对象,最后添加module.exports=name;(exports本身是一个空的对象)
2>.在同一个文件夹添加一个新的getHello.js,在该文件中通过require("./hello")获取该模块;
b.创建包(包是一个目录,不同的文件有这指定的位置)
包文件夹要完全符合以下特点:
package.json : 包说明文件 在包的顶层目录下
二进制文件 : 在bin文件夹下
JavaScript文件 : 在lib文件夹下
文档 : 在doc文件夹下
单元测试 : 在test文件夹下
package.json中main为包的接口模块,如果main字段不存在,则会尝试寻找index.js或者index.node作为包的接口
name:包的名字,必须是唯一的,
包管理器:npm 安装包的命令: npm install [包名](全局安装在包名前添加-g )
c.命令行调试 npm debug debug.js
2.核心模块
a.设置全局变量 : process对象
输出:process.stdout.write();输出内容
输入:process.stdin.resume();//先恢复流
process.stdin.on("data",function(){});//在编写事件响应函数
为事件循环设置任务:process.nextTick(callback);//在下次事件循环响应时执行
b.常用工具util
util.inherits(a,b);实现对象间原型继承(a继承b)
util.inspect(object);将一个对象转化为字符串
c.事件驱动events
var eventEmitter=require("events").EventEmitter;
var events=new eventEmitter();
events.on("eventName",function(arg1,arg2){});事件监听器
events.emit("eventName",arg1,arg2);事件发射器,eventName:事件名,arg为传入参数
events.once("eventName",function(arg1,arg2){});单次事件监听器,执行一次后自动解除
events.removeListener("eventName",function(arg1,arg2){});解除事件监听器
events.removeAllListeners();解除所有事件监听器
d.文件系统fs
打开文件: fs.open(path,flags);path文件路径,flags文件打开方式(r,r+,w,w+,a,a+)
读取文件: 异步:fs.readFile(fileName,encoding,callback(err,data)); 文件名,文件编号,回调函数(接收读取文件内容:err读取是否错误,data读取的内容)
同步:fs.readFileSync();参数同上,错误用try和catch捕获
写入文件: 异步:fs.writeFile(fileName,data,[encoding],callback(err)); 文件不存在是会自动创建
同步:fs.writeFileSync(fileName,data,[encoding],callback(err));
文件更名: fs.rename(path1,path2,callback(err));path相对路径
删除文件: fs.unlink(path,callback);
遍历目录: fs.readdir(path,callback(err,files));
创建目录: fs.mkdir(path,[mode],callback(err));
删除目录: fs.rmdir(path,[callback(err)]);
e.HTTP服务器与客户端
HTTP服务器:
http.Server事件:基于事件的http服务器
request:客户端请求到来时触发
connection:当TCP连接建立时触发,粒度大于request
close:服务器关闭时触发
http.ServerRequest事件:是http请求的信息
data:请求体数据到来时触发,
end:请求体数据传输完毕触发
close:当前请求结束时触发
3.nodejs与html的数据传输方式
dom在connectHtml文件加载。
流程:通过ajax发送请求,在服务器中进行解析请求(通过url地址:携带中文信息时记得解码);
4.连接数据库
a、链接MySql数据库
1.代码安装node-mysql:npm install mysql;
2.配置数据库:mysql.createConnection(object);object中设置
host: 'localhost',//数据库地址
user : "root",//数据库用户
password: "root",//数据库密码
database : "node"//需要连接的数据库
3.连接数据库:connect();
4.操作数据库:
query('select * FROM user',function(err,result){
//执行sql语句
if(err) {
console.log(err);
} else{
console.log(result);
}
});
5.关闭数据库:end()