- fs模块
- 使用http创建服务器
- 切换npm包
- params和query的区别
- 使用express创建服务器
- 路由模块
- 中间件
- 跨域
- 数据库模块
- body-parser模块用来请求体的解析
- 通过express生成token
- 生成二维码
绝对路径的写法
const path = require('path');
path.join(_dirname+'路径名');
快捷键:
1. 使用esc键,快速清空当前已经输入的命令。
2. 2. 输入cls,可以清空终端。
// 获取文件名
path.basename('文件名');
// 获取后缀名
path.extname('文件名');
http模块
const http = require('http');
// 1.创建服务器
const server = http.createServer();
// 2.request请求,客户端请求服务器,触发request事件。
// req是客户端发来的数据
server.on('request',(req,res)=>{
const url = req.url;
// 判断路径
if(url === '/' || url === '/about.html')
var content = '<h1>h1</h1>';
if(url === '/index.html')
var content = '<h2>h2</h2>';
// 设置发给客户端的内容为utf-8
res.setHeader('Content-type','text/html;charset=utf-8');
res.end(content);
})
// 调用这个方法,启动服务器。
server.listen(8080,()=>{
console.log('server running at http://127.0.0.1:8080')
})
如果以后上线的时候想要放弃一些包的话,那么就要使用gitignore来剔除掉我们所没有用到的包。
# 忽略 node_modules目录
/node_modules
/unpackage/dist
(进行占位)
切换包
通过模块切换包
1. npm i nrm -g
2. nrm ls
3. nrm use taobao
params和query的区别
?代表着query
:代表着params
// http:127.0.0.1:8080?name=li query
// http:127.0.0.1:8080/:id params
通过express创建服务器
// 引入express 模块
const express = require('express');
const port = 8080;
2.创建app
const app = express();
3.get请求
app.get('/',(req,res)=>{
const data = {name:'long',age:20};
res.end(JSON.stringify(data));
console.log(req.params)
})
4.启动服务器
app.listen(port,()=>{
console.log('http://127.0.0.1:8080');
})
路由模块
- 创建路由模块
const express = require('express');
// 大写
const router = express.Router();
router.get('/:id',(req,res)=>{
console.log(req.params);
})
router.post('/',(req,res)=>{
console.log(1111);
})
module.exports = router;
- 引入路由模块
// 创建路由模块
const router = require('./3.js');
- 注册路由模块
// 注册并使用路由模块
app.use(router);
中间件
4.中间件(将客户端得到的数据进行转换)
// 中间件
const mm = function(req,res,next){
console.log(1111);
next();
}
// 全局中间件
app.use(mm);
// 局部中间件
app.get('/',mm,(req,res)=>{});
- 应用中间件
- 路由中间件
- 错误中间件(err,req,res,next) (必须用到应用中间件 同时应在get方法之后来捕获错误)
app.get('/',(req,res)=>{ throw new Error('你说啥呢'); }) // 写在后面进行捕获错误 app.use(judgeError);
app.use来触发以下的东西 配置项都配置到路由前面
express.static( 快速托管静态资源)
express.json(解析json数据)
express.urlencoded(解析 url-encoded的数据)
req.on('某数据',()=>{}) ==>监听这个数据
跨域
## 跨域解决方法- Cors
- Jsonp(只支持GET请求)
- proxy
cors的使用方法(有兼容性)
- npm i cors
- const cors = require(‘cors’);
- app.use(cors());
解决跨域问题
通过vue自带的proxy来解决跨域问题
devServer: {
proxy: {
'/api': {
target: 'http://web.juhe.cn:8080',
changeOrigin: true,
pathRewrite: {
'^/api': '/'
}
}
}
}
数据库模块
// 引入数据库模块
const mysql = require('mysql');
// 通过这个模块和自己的数据库连接
const db = sql.createPool({
// ip地址
host:'127.0.0.1',
// 用户名
user:'root',
// 密码
password:'admin123',
// 数据库表名
database:'my_db_01'
##### insert写法
1. // 第一种写法
const sqlStr = 'insert into users(username,password,status) values (?,?,?)';
2. // 第二种写法 这样写的话下面的dataArr就不需要的了,直接把sqlNewData写到dataArr的位置就行了
const sqlyiyi = 'insert into users set ?';
const dataArr = [
sqlNewData.username,
sqlNewData.password,
sqlNewData.status
];
// 测试与自己的数据库是否连接成功s
// query('查询语句',回调函数)
db.query(sqlStr,dataArr,(err,results)=>{
if(err) return console.log(err.message);
console.log(results);
})
#### update写法
3. // 第一种写法
const sqlStr = 'update users set password=?,username=? where id=?'
4. // 第二种写法
const sqlStr = 'update users set ? where id=?'
// query('查询语句',回调函数)
db.query(sqlStr,[sqlNewData.password,sqlNewData.password,sqlNewData.id],(err,results)=>{
if(err) return console.log(err.message);
console.log(results);
})
body-parser模块用来请求体的解析
github
node.js body 解析中间件
处理程序之前,在中间件中对传入的请求体进行解析(response body)
body-parser 提供四种解析器
JSON body parser
Raw body parser
Text body parser
URL-encoded form body parser
利用jwT生成token
安装包
npm i jsonwebtoken express-jwt
jsonwebtoken 生成token字符串
jwt将生成的字符串转化成json对象
const express = require('express');
// 生成一个服务器
const app = express();
// 生成jwt字符串
const jsonwebtoken = require('jsonwebtoken')
// 将jwt字符串解析成json对象(中间件)
const expressjwt = require('express-jwt')
// 解密同时将数据生成json对象
app.use(expressjwt({
secret:secretKey
}))
// 通过上述的use,可以将解析到的数据放到req.user身上
// 定义密钥
const secretKey = 'lcl 是大帅哥》《!';
app.get('/',(req,res)=>{
res.send({
status:200,
meg:'登录成功',
// 用户的信息对象,加密密钥,配置对象
token:jsonwebtoken.sign({
username:'li',
age:12
},secretKey,{
expiresIn:'30s'
})
})
})
// 客户端发送数据就是authorization发送token值 开头得加上Bearer + 回车(postman里面加上)
// 通过错误中间件来捕获错误
生成二维码
从后台获取字符串url从而生成二维码图片
- 通过npm包的qrcode来进行二维码的生成。
import QRCode from 'qrcode'
// With promises
QRCode.toDataURL('I am a pony!')
.then(url => {
console.log(url)
})
.catch(err => {
console.error(err)
})
// With async/await
const generateQR = async text => {
try {
console.log(await QRCode.toDataURL(text))
} catch (err) {
console.error(err)
}
}