一、node.js起源
发源人 Ryan Dahl(俄罗斯人)
2006年开始的网站开发(网页制作)
2009年是 node 的元年
二、node.js是什么?
是一个让JavaScript运行在服务器端的一个开发平台,基于V8引擎。它让JavaScript的触角伸到了服务器端,可以与PHP、JSP、Python、ruby、ASP平起平坐。
node.js没有外部容器,没有其他配置或其他语言支持运行,node没有固定文件夹。
三、node.js与其他后台语言的不同?
1.node是单线程,其他多线程
2.没有web容器概念 static
像在wampServer中里面有www、Apache、php、mysql等语言的支撑才能运行html文 件、这是明文规定,而在node中只要路径正确,放哪里都能运行
四、node.js优缺点
优点:体积小、高并发、性能优越
缺点:不适用于大型项目
五、node.js的特点
单线程:节省内存开销、成本低、并发性高(单线程?一次只能开辟一个进程,等待当前进程完成以后,才能开辟下一个进程,当前进程断掉,服务器崩溃)
非阻塞I/O:执行效率高、充分利用cpu性能、利用回调函数去执行相应逻辑代码从而体现出事件循环。(非阻塞I/O?依据回调函数访问事件循环)
事件驱动:触发事件后在回调函数中可以处理一系列循环事件,也称作为“事件环”机制。
六、node的应用场景
与webSocket配合实时通信:用户表单收集、考试系统、实时聊天、图文直播、提供JSON的API(为前台angular使用)
node、npm(包管理工具)、express(node里面的插件专门做路由路径)
七、JS中 JSON.parse()、JSON.stringify()、eval()的区别
JSON.parse():将json字符串转换成json对象。
JSON.stringify() :将json对象转换成json字符串。
eval():可计算某个字符串,并执行其中的javascript表达式或要执行的语句。
八、node中http模块
1.导入http模块:var http=require("http");
2.创建服务器:var server=http.createServer(function(req,res){ })
其中req 是 request 的简写请求(可以去做路由) res 是 response 的简写 响应
3.挂起服务器:server.listen(3000,"127.0.0.1") localhost
4.设置请求头 200状态码 内容类型 HTML编码格式
res.writeHead(200,{"Content-type":"text/html;charse=utf-8"});
5.响应结束及在页面中输出数据
res.end((1+2+3+4+5).toString());//响应结束否则会一直加载,还有计算功能
6.req.url是返回地址栏域名后面的路径:
默认返回:/favicon.ico 和 /
返回:/red/green/orange?name="xx"&age=123
7.往网页中添加内容(可以解析标签)相当于js中的document.write()
res.write("<h1>内容</h1>");
8.若想查看所传参数中所包含的内容用:
console.log(arguments);//输出req和res的所有方法
9.取到路径中最后一个/后面的路径
1) req.params[0] //localhost:3000/teacher/123456 输出123456
2) 路径获取指定id名 /Children/:id var id=req.params["id"];
九、node 中 fs 模块加载 fs 模块读取资源模板
1.导入fs模块:var fs=require("fs")
2.读取文件:fs.readFile("./green.html",function(err,data){})
3.写文件:fs.writeFile("./2.txt",data,function(err){}) 用嵌套(读完马上写)
4.复制文件:fs.copyFileSync("1.txt","4.txt",function(err){}); (待定)
5.读取文件夹:fs.readdir("./sys/",function(err,files){});
6.判断是否是一个文件夹:
for(leti=0;i<files.length;i++){ //异步 方法一 isDirectory()判断是否是个文件夹 stat判断是否存在 fs.stat("./sys/"+files[i],function(err,stats){ if(stats.isDirectory()){ arr.push(files[i]) } console.log(arr) }); //sync同步 方法二 isDirectory()判断是否是个文件夹 if(fs.lstatSync("./sys/"+files[i]).isDirectory()){ arr1.push(files[i]); } console.log(arr1);}
7.创建文件目录:makdir
十、node 中 url 模块
1.导入url模块:var url=require("url");
2.获取url路径(path /)后面的部分:var pathname=url.parse(req.url).pathname
例如:地址栏输入//http://127.0.0.1:4000/aaa/bbb?name="xx"22&age=20
获取到的值是 /aaa/bbb
pathname.indexOf(".")==-1 //返回pathname路径中是否存在点,-1表示不存在
3.匹配search(?)后面的路径部分:var query=url.parse(req.url,true).query;
例如:地址栏输入//http://127.0.0.1:4000/aaa/bbb?name="xx"22&age=20
获取到的值是 { name: '"xx"22', age: '20' } 有true则以对象形式显示
4.url.parse(req.url).path(获取除了端口以外的/后面的所有字段)
获取到:/teacher/123456?name=%22xx%22&&age=12
十一、node 中 path 模块
1.导入path模块:var path=require("path"); //加载路径模块
2.返回路径中的扩展名 :path.extname(url.parse(req.url).pathname)
如果path以 ‘.' 为结尾,将返回 ‘.',如果无扩展名 又 不以'.'结尾,将返回空值。
3.规范化给定的 path,并解析 '..' 和 '.' 片段:path.normalize(req.url)
例如:path.normalize('C:////temp\\\\/\\/\\/foo/bar');
// Returns: 'C:\\temp\\foo\\bar'
十二、模块
暴露模块的两种方式及区别
exports暴露模块 module.exports暴露的是一个对象
区别:
1.module.exports初始值为一个空对象{} 只能出现一次 是个类(构造函数)
2.exports是指向的module.exports的引用 可以出现多次 不能暴露构造函数
3.require()返回的是module.exports而不是exports
用法:
exports:
exports.msg=msg; //msg是一个变量
exports.show=show; //show是一个函数
module.exports:
module.exports={
msg:msg,//msg是一个变量
show:show //show是一个函数
}
module.exports=People; //People是一个构造函数
十三、包管理工具
npm(国外的,比较全面,下载速度慢)和cnpm(国内的,淘宝镜像,下载速度快,有缺陷)
指向淘宝镜像:npm --registry registry.npm.taobao.org install
npm包管理工具:
作用:下载插件、库和框架 同时还可以更新包的版本
用法:npm install 库名 插件名 框架名 -g(全局)
会自动下载node_modules(项目依赖)文件夹下 注:拷项目时删掉,然后 npm install 安装项目依赖
十四、querystring 模块
1.导入模板:querystring=require("querystring") //查询指定的字符串
2.将一个字符串反序列化为一个对象:querystring.parse(str,separator,eq,options)
参数:str指需要反序列化的字符串;
separator(可省)指用于分割str这个字符串的字符或字符串,默认值为"&";
eq(可省)指用于划分键和值的字符或字符串,默认值为"=";
options(可省)该参数是一个对象,里面可设置maxKeys和decodeURIComponent这两个属性:
maxKeys:传入一个number类型,指定解析键值对的最大值,默认值为1000,如果设置为0时,则取消解析的数量限制;
decodeURIComponent:传入一个function,用于对含有%的字符串进行解码,默认值为querystring.unescape。
十五、上传图片所用的模板
var http=require("http");//引入http模块
var formidable=require("formidable");//用 npm 下载引入上传文件模块
var util=require("util");//工具库
var fs=require("fs");
var path=require("path");
var sd=require("silly-datetime");//用npm下载 时间模块
sd.format(new Date(),'YYYYMMDD')//获取年月日
十六、ejs模板 用npm 命令下载(jade)模板引擎
1.ejs是什么?
EJS是一个简单高效的模板语言,通过数据和模板,可以生成HTML标记文本 。
可以说EJS是一个JavaScript库,EJS可以同时运行在客户端和服务器端,
客户端安装直接引入文件即可,服务器端用npm包安装
2.EJS的特点:
快速编译和渲染
简单的模板标签
自定义标记分隔符
支持文本包含
支持浏览器端和服务器端
模板静态缓存
支持express视图系统
3.EJS成员函数:
render(str,data,[option]):直接渲染字符串并生成html
str:需要解析的字符串模板
data:数据
option:配置选项
4.EJS常用标签
<% %>流程控制标签
<%= %>输出标签(原文输出HTML标签)
<%- %>输出标签(HTML会被浏览器解析)
<%# %>注释标签
% 对标记进行转义
-%> 去掉没用的空格
说明:ejs中的逻辑代码全部用JavaScript
十七、express模块 用npm命令下载 主要做路由的
1.概念:Express是目前最流行的基于Node.js的Web开发框架,可以快速地搭建一个完整功能的网站。
2.加载express模块注:必须下载express包express属于方法
var express=require("express");
var app=express(); //引用express方法
app.use(express.static("./views")); //app.use()使用一些插件默认查找index.html
3.koa是基于node.js的下一代的web开发框架 更小,更富有表现力强,更健壮的web框架 。
generator函数可以免除重复繁琐的回掉函数嵌套
4.中间件body-parser
5.cookie-parser
6.express-session
7.cookie-session
8.connect-flash