理论知识点:
- nodejs包管理器npm yarn cnpm的区别
- 依赖安装:npm是npm i;yarn是yarn add;cnpm是cnpm i
- 安装顺序:npm是一个依赖接一个依赖进行安装。yarn是并行安装。
- 安装信息:npm安装信息全部打印出来。yarn安装信息是以emoji表情包展示出来
- 再次安装:npm安装过的依赖再次安装会重新下载,yarn安装过的依赖再次安装不会重新下载。
注:cnpm是npm的镜像,实际项目不推荐使用。原因:会产生过多依赖文件,当依赖过大、比较吃网络的情况下可以使用cnpm
- BSON是由mongodb开发饿一个数据格式,跟JSON相比优点在于实现目标
- 更快的遍历速度
- 操作更简单
- 增加了额外的数据类型
- 关系型数据库的优点
- 容易理解
- 使用方便
- 易于维护
- node由c++语言编写
- node的全局对象
- process
- console
- Buffer
- exports
- node的http核心模块提供的方法有:request、get、createServer
http协议的端口是80
https协议的端口是443
- node提供的内置模块对象有:net、http、events、fs、url、querystring
- stream是一个基于事件EventEmitter的数据管理模式。
- nodejs项目上传图片需要借助的模块对象为-----multiparty。
- fs中判断文件是否为文件类型的方法------isfile
- url模块提供的用来解析一个url地址的而方法-----url.parse()
- net模块提供的创建客户端对象的方法--------------new net.Socket()
- express response常用的方法有:res.end(),res.send(),res.redirect()
- express 是一个基于nodejs平台的极简、灵活的web前端应用开发框架,express不是对nodejs已有特征的二次抽象,它完全是由路由和中间件组成。express框架核心特征定义了路由表用于执行不同的HTTP请求动作,也提供了任意排列组合的Connect中间件。express中的每个路由都算一个中间件,express中间件可以访问request对象。express要全局安装express才能使用。
- 结束请求--响应流程的中间件称为------句柄函数。
- Express使用脚手架创建项目指令是:express -e
- ejs用来解析带有html标签数据的流程标签是 <% %>
- async模块提供的方法有:series、map、waterfall、filter
- webSocket不属于nodejs,它是一个前端H5的通信协议。
- websocket对象一旦创建连接,立马会触发的事件是onopen
- mocha中chai断言库的断言风格:expect should assert
实战代码实现:
- 分页效果
//分页效果,后端代码实现
router.get('/article', function(req, res){
var pageNum = req.query.pageNum;
pageNum = pageNum?pageNum:1;
var page = 0;
var size =7;
var count = 0;
mongodb.connect(db_str,(err,database)=>{
database.collection("article",(err,coll)=>{
async.series([
function(callback){
coll.find({}).toArray((err,data)=>{
count = data.length;
page = Math.ceil(count/size)
// 上一页/下一页
pageNum=pageNum<1?1:pageNum;
pageNum= pageNum>page?page:pageNum;
callback(null,"")
})
},
function(callback){
coll.find({}).sort({_id:-1}).limit(size).skip((pageNum-1)*size).toArray((err,data)=>{
callback(null,data)
})
}
],function(err,data){
res.render("article",{name:req.session.name,list:data[1],pageNum:pageNum,page:page,count:count,size:size})
database.close()
})
})
})
});
前端的话,通过?query传参。
- express路由
//express路由级路由
var express = require("express");
//通过express路由级别路由创建后台服务器环境
var app =express()
//创建路由对象
var router = express.Router();
router.get("/",(req,res)=>{
res.send("hello")
})
router.get("/about",(req,res)=>{
res.send("hello关于")
})
router.get("/other",(req,res)=>{
res.send("hello其他")
})
app.use("/home",router)
//监听
app.listen(3000)
//express应用级别路由
var express = require("express")
var app = express();
//相当于http.createServer()
app.get("/",(req,res)=>{
res.send("hello---index")
})
app.get("/home",(req,res)=>{
res.send("hello---home")
})
app.get("/about",(req,res)=>{
res.send("hello---about")
})
app.listen(3000)
- 销毁express-session方法
//方法一
req.session.username = undefined
//方法二
req.session.destroy((err,data)=>{
if(err){
console.log(err)
}else{
res.redirect("/")
}
})
- 将图片上传服务器
var http=require('http');
var fs=require('fs')
http.createServer((req,res)=>{
res.writeHead(200,{'content-type':'image/jpg'})
if(req.url!='/favicon.ico'){
fs.readFile('./a.jpg','binary',(err,data)=>{
res.write(data,'binary')
res.end()
})
}
}).listen(3000)
- mocha功能测试的核心代码
var expect = require("chai").expect;
describe("功能测试",function(){
it("",function(done){
var x = true;
var f=function(){
x=false;
expect(x).to.be.not.ok;
done();
}
setTimeout(f,4000);
})
})