查看全局安装的包 npm list -g --depth=0
npx 临时安装一个包,用完之后就自动删除
xx中间件 所有xx运行到某个位置都会经过中间件的处理
非关系型数据库用mongoose库,关系型数据库用sequelize库
大写表示对象,小写表示实例,可以new的东西都尽量大写开头
ejs部分的代码中注释了也会运行
caniuse.com 查询兼容性的网址
错误码汇总(非状态码)
这两句用来处理请求参数
- app.use(express.json());
- app.use(express.urlencoded({ extended: false }));
使用ajax登录无法在后台进行跳转即ajax请求跳转在前端处理,form表单跳转在后端处理
通常用后端的session来设置cookie,session保存在服务器端,cookie保存在客户端,cookie的值经过加密,服务端才能拿到真实的值
express-generator
npm(x) express-generator 目录名 -e 在指定目录下创建一个express应用,并使用ejs模板引擎,自带路由
创建之后使用npm i安装express应用依赖
app.use是express中调用中间件的方法,其中app是express的实例
使用了这两句可以通过req.body得到请求中的参数
app.use(express.json())
app.use(express.urlencoded({ extended: false}))
express生成器指南
cookie-parse express的cookie处理中间件
路由
通配符路由 定义路由时加上:id,则原本路径后面无论加什么都可以访问
运行步骤 新建路由->引入路由->浏览器打开
注 api的本质就是路由
开发中为后台和前台交互的页面
module.exports = router 导出模块
ES6写法
mongodb
关系型数据库 结构性存储 mysql MariaDB
在nodejs中用sequelize包来连接
非关系型数据库 文档型存储(json格式) MongoDB
在nodejs中用mongoose包来连接
mongod 启动数据库
show dbs 查看数据库
use 创建或切换数据库 注数据库中没有内容时不会显示
db.数据库名
db.dropDatabase() 删除数据库
mongoose
关系型数据库 结构性存储 mysql MariaDB
在nodejs中用sequelize包来连接
非关系型数据库 文档型存储(json格式) MongoDB
在nodejs中用mongoose包来连接
nodejs可以连接mongodb的一个库
npm install mongoose -S 安装mongoose
Schema 定义数据库文档的数据结构
用mongoose连接MongoDB
mongoose.connect(数据库地址和库名,{userNewUrlParser:true})
module.exports = new model()
model的find基于promise,自己就有回调函数then
在数据库中查找
注 find从后台返回的数据是一个数组
bcrypt加密
bcrypt包 nodejs中用来加密密码
npm i bcrypt -S
加密
bcrypt.genSalt(saltRounds,(err,salt)=>{
bcrypt.hash(password, salt, (err, password)=>{
//这里的password为加盐加密后的密码字符串
})
})
解密
bcrypt.compare(password,resp.password,(req,result)=>{
// password是req.body中用户输入的的,resp.password是从数据库中取出的密码
})
mvc架构
View层是界面,Controller层是业务逻辑,Model层是数据库访问
目的:MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强
View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性。
fetch方法(同AJAX)
js原生方法,用于访问和操作http请求和响应,会返回包含响应结果的promise
fetch(‘路由地址’[,发送数据(json)])
fetch('/api/v1/signin', {
//body为要发送的数据
body: JSON.stringify(data),
method: 'POST',
})
.then(response => response.json()) //fetch的响应不是直接JSON,需要先调一下.json方法,在下一个then里去找到json
.then(resp => 处理返回的resp
})