Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions ex01/__tests__/index.spec.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
test('练习01 自动化生成路由配置',() => {
const {getRouter} = require('../index')
const ret = getRouter(__dirname + '/data')
expect(getRouter(__dirname + '/data')).toBe(
test("练习01 自动化生成路由配置", () => {
const { getRouter } = require("../index");
const ret = getRouter(__dirname + "/data");
expect(ret).toBe(
`
export default new Router({
mode: 'history',
Expand All @@ -17,8 +17,7 @@ export default new Router({
name: 'index',
component: () => import('./views/index.vue')
},

]
})`
)
})
})
46 changes: 24 additions & 22 deletions ex01/index.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
const {resolve} = require('path')
const fs = require('fs')
module.exports.getRouter = (path = resolve('./')) => {
// ##BEGIN## 代码已加密
JEHJEHJEHJEHOSJOEEOESOEIOEAJEHOEJOSXOEIOEAJEHJXIJEHOSEOEIJHOOEXOSSOOIOSOOSOOSXOEXOJSOPPOESOSJJPPOEPOOIOEAOSHJPH
JEHJEHJEHJEHOEXOSSOEAOPJOEXOESJEHOOX
OSSOPEOEPOEEOEXOEAJEHOSOOSSOSEOOIOPJOEJOEAJEHOESOSSOPSJEHOJOOEEOPJOEAOSSOEXJPPOPX
JEHJEHJEHJEHOEOOEEOSOOSSJXPJEHJPEOSHOSXOEIOEAOEEOEXOPPJPEJPA
JEHJEHJEHJEHOOAOOIOEIOSSJXPJEHOEPOEXOEEOSJOSSOEIOEIJHOOSSOESOPOJHOJIEJISOJSJIXOOHOJPOJOJAPJPA
JEHJEHJEHJEHOEXOEEOPJOEAOSSOEIJXPJEHOOO
JPJOPXOEJOSXOEIOEAJHOOEOOOIOEPJPPOSEOSXOEJOSSJEHJXIJXAJEH
OOXOPX
JEHJEHJEHJEHOEPOOIOEAOSHJXPJEHJPEJHSJPJOPXOSEOSXOEJOSSJHOOEXOSSOEPOEJOOIOSJOSSJPPJPEJHOOPOOPJOSSJPEJPAJPEJPEJPHOPAJPEJPA
JEHJEHJEHJEHOESOOIOEOOSSJXPJEHJPEJPJOPXOSEOSXOEJOSSJHOOEXOSSOEPOEJOOIOSJOSSJPPJPEJHOOPOOPJOSSJPEJPAJPEJPEJPHOPAJPEJPA
JEHJEHJEHJEHOSJOEEOEOOEPOEEOESOSSOESOEAJXPJEHJPPJPHJEHJXIJXAJEHOSXOEOOEPOEEOEXOEAJPPJPEJHOJHSOPOOSXOSSOPSOEIJHSJPJOPXOSEOSXOEJOSSOPAJPEJPH
OPAJPA
OOXJPHJHOOSIOEEOSXOESJPPJPEJPEJPHOPA
JEHJEHJEHJEHOOE
OPAJPHOOX
// ##END##
}

const { resolve,basename } = require("path");
const fs = require("fs");
module.exports.getRouter = (path = resolve("./")) => {
const fileList = fs.readdirSync(path)
let routeStr = ''
fileList.forEach(file=>{
let name = basename(file,'.vue')
let filename = basename(file)
routeStr+=`
{
path: '/${name}',
name: '${name}',
component: () => import('./views/${filename}')
},`
})
const config =`
export default new Router({
mode: 'history',
base: process.env.BASE_URL,
routes: [${routeStr}
]
})`
return config
};
23 changes: 23 additions & 0 deletions ex01/index1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const { resolve } = require("path");
const fs = require("fs");
module.exports.getRouter = (path = resolve("./")) => {
// ##BEGIN##
const list = fs.readdirSync(path);
return `
export default new Router({
mode: 'history',
base: process.env.BASE_URL,
routes: [
${list.map(
(file) =>
`{
path: '/${file.replace(".vue", "")}',
name: '${file.replace(".vue", "")}',
component: () => import('./views/${file}'
},
`
)}
]
})`;
// ##END##
};
32 changes: 15 additions & 17 deletions ex02/index.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
module.exports.compose = middlewares => {
return function () {
return dispatch(0)
function dispatch(i) {
// ##BEGIN## 代码已加密
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOEJOSSOEAJEHOSEOESJEHJXIJEHOEOOSXOSOOSOOEJOSSOPSOOIOEXOSSOEIOOOOSXOOE
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOSXOSEJEHJPPJEXOSEOESJPHJEHOPX
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOEXOSSOEAOPJOEXOESJEHJAAOEXOEEOEOOSXOEIOSSJHOOEXOSSOEIOEEOEJOPOOSSJPPJPH
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOPA
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOEXOSSOEAOPJOEXOESJEHJAAOEXOEEOEOOSXOEIOSSJHOOEXOSSOEIOEEOEJOPOOSSJPP
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOSEOESJPPOSEOPJOESOSJOEAOSXOEEOESJEHOESOSSOPEOEAJPPJPHJEHOPX
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOEXOSSOEAOPJOEXOESJEHOSOOSXOEIOEPOOIOEAOSJOSHJPPOSXJEHJPIJEHJHPJPH
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOPAJPH
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJPH
// ##END##
}
module.exports.compose = (middlewares) => {
return function () {
return dispatch(0);
function dispatch(i) {
let fn = middlewares[i];
if (!fn) {
return Promise.resolve();
}
return Promise.resolve(
fn(function next() {
return dispatch(i + 1);
})
);
}
}
};
};
19 changes: 9 additions & 10 deletions ex03/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@ module.exports.parser = path => {
let reqData = [];
let size = 0;
return new Promise(resolve => {
// ##BEGIN## 代码已加密
JEHJEHJEHJEHJEHJEHJEHJEHOEXOSSOOIOSOOJSOEAOEXOSSOOIOEOJHOOEEOESJPPJPEOSOOOIOEAOOIJPEJPAJEHOSOOOIOEAOOIJEHJXIJXAJEHOPX
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOEXOSSOEHJIHOOIOEAOOIJHOOEPOPJOEIOSHJPPOSOOOIOEAOOIJPHJXH
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOEIOSXOPHOSSJEHJPIJXIJEHOSOOOIOEAOOIJHOOEJOSSOESOSPOEAOSHJXH
JEHJEHJEHJEHJEHJEHJEHJEHOPAJPHJXH
JEHJEHJEHJEHJEHJEHJEHJEHOEXOSSOOIOSOOJSOEAOEXOSSOOIOEOJHOOEEOESJPPJPEOSSOESOSOJPEJPAJEHOSEOPJOESOSJOEAOSXOEEOESJEHJPPJPHJEHOPX
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOSJOEEOESOEIOEAJEHOSOOOIOEAOOIJEHJXIJEHJIEOPJOSEOSEOSSOEXJHOOSJOEEOESOSJOOIOEAJPPOEXOSSOEHJIHOOIOEAOOIJPAJEHOEIOSXOPHOSSJPHJXH
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOEXOSSOEIOEEOEJOPOOSSJPPJASOJSJAIJAXJHOOEPOOIOEXOEIOSSJPPOSOOOIOEAOOIJHOOEAOEEOJSOEAOEXOSXOESOSPJPPJPHJPHJPH
JEHJEHJEHJEHJEHJEHJEHJEHOPAJPHJXH
// ##END##
readStream.on("data",(data)=>{
reqData.push(data)
size += data.length
})
readStream.on('end',()=>{
const json = Buffer.concat(reqData,size)
const content = JSON.parse(json.toString())
resolve(content)
})
})
}
58 changes: 30 additions & 28 deletions ex04/__tests__/index.spec.js
Original file line number Diff line number Diff line change
@@ -1,30 +1,32 @@
const Sequelize = require('sequelize');
test('练习04 完成一个一对多查询', async () => {
const Sequelize = require("sequelize");
test("练习04 完成一个一对多查询", async () => {
const sequelize = new Sequelize({
host: "localhost",
dialect: "sqlite",
// operatorsAliases: true,
// 关闭执行日志
logging: false,
});

const sequelize = new Sequelize({
host: 'localhost',
dialect: 'sqlite',
operatorsAliases: true,
// 关闭执行日志
logging: false
});
// 初始化模型
const { initModel } = require("../index");
const { Product, User } = await initModel(sequelize);

// 初始化模型
const { initModel } = require('../index')
const { Product, User } = await initModel(sequelize)

// 设置数据
user = await User.create({
name: 'Tom',
})
await user.createProduct({
title: '商品一'
})
await user.createProduct({
title: '商品二'
})
const ret = await Product.findAll({
attributes: ['title']
})
expect(JSON.parse(JSON.stringify(ret))).toEqual([{"title": "商品一"}, {"title": "商品二"}])
})
// 设置数据
user = await User.create({
name: "Tom",
});
await user.createProduct({
title: "商品一",
});
await user.createProduct({
title: "商品二",
});
const ret = await Product.findAll({
attributes: ["title"],
});
expect(JSON.parse(JSON.stringify(ret))).toEqual([
{ title: "商品一" },
{ title: "商品二" },
]);
});
35 changes: 5 additions & 30 deletions ex04/index.js
Original file line number Diff line number Diff line change
@@ -1,34 +1,9 @@
const Sequelize = require('sequelize');
module.exports.initModel = async sequelize => {
// ##BEGIN## 代码已加密
JEHJEHOJPOEIOSSOEXJEHJXIJEHOEIOSSOEHOPJOSSOEJOSXOPHOSSJHOOSOOSSOSEOSXOESOSSJPPJPEOPJOEIOSSOEXJPEJPAJEHOPX
JEHJEHJEHJEHOSXOSOJXPJEHOPX
JEHJEHJEHJEHJEHJEHOEAOPPOEPOSSJXPJEHOJSOSSOEHOPJOSSOEJOSXOPHOSSJHOJAOJAXOJEJIXJIAJIXOJOJPA
JEHJEHJEHJEHJEHJEHOOIOPJOEAOEEJAOOESOSJOEXOSSOEOOSSOESOEAJXPJEHOEAOEXOPJOSSJPA
JEHJEHJEHJEHJEHJEHOOIOEJOEJOEEOPSJAXOPJOEJOEJJXPJEHOSEOOIOEJOEIOSSJPA
JEHJEHJEHJEHJEHJEHOEPOEXOSXOEOOOIOEXOPPJAEOSSOPPJXPJEHOEAOEXOPJOSS
JEHJEHJEHJEHOPAJPA
JEHJEHJEHJEHOESOOIOEOOSSJXPJEHOJSOSSOEHOPJOSSOEJOSXOPHOSSJHOOJSOJEOJOJAOJAXJIA
JEHJEHOPAJPHJXH

JEHJEHJAAOEXOEEOSOOPJOSJOEAJEHJXIJEHOEIOSSOEHOPJOSSOEJOSXOPHOSSJHOOSOOSSOSEOSXOESOSSJPPJPEOEPOEXOEEOSOOPJOSJOEAJPEJPAJEHOPX
JEHJEHJEHJEHOSXOSOJXPJEHOPX
JEHJEHJEHJEHJEHJEHOEAOPPOEPOSSJXPJEHOJSOSSOEHOPJOSSOEJOSXOPHOSSJHOJAOJAXOJEJIXJIAJIXOJOJPA
JEHJEHJEHJEHJEHJEHOOIOPJOEAOEEJAOOESOSJOEXOSSOEOOSSOESOEAJXPJEHOEAOEXOPJOSSJPA
JEHJEHJEHJEHJEHJEHOOIOEJOEJOEEOPSJAXOPJOEJOEJJXPJEHOSEOOIOEJOEIOSSJPA
JEHJEHJEHJEHJEHJEHOEPOEXOSXOEOOOIOEXOPPJAEOSSOPPJXPJEHOEAOEXOPJOSS
JEHJEHJEHJEHOPAJPA
JEHJEHJEHJEHOEAOSXOEAOEJOSSJXPJEHOPX
JEHJEHJEHJEHJEHJEHOEAOPPOEPOSSJXPJEHOJSOSSOEHOPJOSSOEJOSXOPHOSSJHOOJSOJEOJOJAOJAXJIAJPA
JEHJEHJEHJEHJEHJEHOOIOEJOEJOEEOPSJAXOPJOEJOEJJXPJEHOSEOOIOEJOEIOSS
JEHJEHJEHJEHOPAJPA
JEHJEHOPAJPHJXH
JEHJEHJAAOEXOEEOSOOPJOSJOEAJHOOOAOSSOEJOEEOESOSPOEIOJEOEEJPPOJPOEIOSSOEXJPAJEHOPX
JEHJEHJEHJEHOSJOEEOESOEIOEAOEXOOIOSXOESOEAOEIJXPJEHOEAOEXOPJOSSJPA
JEHJEHJEHJEHOEEOESJIHOSSOEJOSSOEAOSSJXPJEHJPEJIPJISOJSJIPJISJIHJIXJPE
JEHJEHOPAJPHJXH
JEHJEHOJPOEIOSSOEXJHOOSHOOIOEIJAHOOIOESOPPJPPJAAOEXOEEOSOOPJOSJOEAJPHJXH
JEHJEHOOIOPSOOIOSXOEAJEHOEIOSSOEHOPJOSSOEJOSXOPHOSSJHOOEIOPPOESOSJJPPOEAOEXOPJOSSJPH
// ##END##
const User = sequelize.define("User", { name: Sequelize.STRING });
const Product = sequelize.define("Product", { title: Sequelize.STRING });
User.belongsTo(Product);
Product.hasMany(User);
await sequelize.sync({ force: true });
return { User, Product }
}
34 changes: 34 additions & 0 deletions ex04/index1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
const Sequelize = require("sequelize");
module.exports.initModel = async (sequelize) => {
// ##BEGIN##
User = sequelize.define("user", {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false,
primaryKey: true,
},
name: Sequelize.STRING,
});

Product = sequelize.define("product", {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false,
primaryKey: true,
},
title: {
type: Sequelize.STRING,
allowNull: false,
},
});
Product.belongsTo(User, {
constraints: true,
onDelete: "CASCADE",
});
User.hasMany(Product);
await sequelize.sync(true);
// ##END##
return { User, Product };
};
26 changes: 11 additions & 15 deletions ex05/index.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
const {EventEmitter} = require('events')
const { EventEmitter } = require("events");
module.exports = class Connection {
// ##BEGIN## 代码已加密
JEHJEHJEHJEHOSJOEEOESOEIOEAOEXOPJOSJOEAOEEOEXJEHJPPJPHOPX
JEHJEHJEHJEHJEHJEHJEHJEHOEAOSHOSXOEIJHOOSSOPOOSSOESOEAJEHJXIJEHOESOSSOPSJEHJIXOPOOSSOESOEAJIXOEOOSXOEAOEAOSSOEXJPPJPHJXHJEH
JEHJEHJEHJEHOPA

JEHJEHJEHJEHOSJOEEOESOESOSSOSJOEAOSXOEEOESJPPOEOOEIOSPJPHJEHOPX
JEHJEHJEHJEHJEHJEHJEHJEHOEAOSHOSXOEIJHOOSSOPOOSSOESOEAJHOOSSOEOOSXOEAJPPJPEOSJOEEOESOESJPEJPAOEOOEIOSPJPH
JEHJEHJEHJEHOPA

JEHJEHJEHJEHOEEOESJIPOEEOESOESJPPOSJOOAJPHJEHOPX
JEHJEHJEHJEHJEHJEHJEHJEHOEAOSHOSXOEIJHOOSSOPOOSSOESOEAJHOOEEOESJPPJPEOSJOEEOESOESJPEJPAOSJOOAJPH
JEHJEHJEHJEHOPA
// ##END##
}
constructor() {
this.handles = []
}
onConn(fn) {
this.handles.push(fn)
}
connection(msg) {
this.handles.forEach(fn=>fn(msg))
}
};
16 changes: 16 additions & 0 deletions ex05/index1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const { EventEmitter } = require("events");
module.exports = class Connection {
// ##BEGIN##
constructor() {
this.event = new EventEmitter();
}

connection(msg) {
this.event.emit("conn", msg);
}

onConn(cb) {
this.event.on("conn", cb);
}
// ##END##
};
1 change: 0 additions & 1 deletion ex06/__tests__/index.spec.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
const { createToken } = require('../index')
const token = createToken('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InVzZXJuYW1lIjoiYWJjIiwicGFzc3dvcmQiOiIxMTExMTEifSwiZXhwIjoxNTkxOTMzODcyLCJpYXQiOjE1OTE5MzAyNzJ9.oKAj1dYjiHaNmKB4l5hUU84yycwZMIMLg47Rt5QxKFQ')
test('练习06 有效性验证', () => {

expect(new Date(token.getExp() * 1000).toISOString()).toBe('2020-06-12T03:51:12.000Z')
})
test('练习06 JWT有效期和有效性验证', () => {
Expand Down
7 changes: 2 additions & 5 deletions ex06/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,13 @@ module.exports.createToken = token => {

return {
getExp: () => {
// ##BEGIN## 代码已加密
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOSJOEEOESOEIOEAJEHOEPOOIOPPOEJOEEOOIOSOJEHJXIJEHJASOJSJAIJAXJHOOEPOOIOEXOEIOSSJPPOESOSSOPSJEHJIEOPJOSEOSEOSSOEXJHOOSEOEXOEEOEOJPPOOIOEXOPPOOOJHPOOEJPAJEHJPEOOAOOIOEIOSSJXJJHIJPEJPHJPH
JEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHJEHOEXOSSOEAOPJOEXOESJEHOEPOOIOPPOEJOEEOOIOSOJHOOSSOPEOEP
// ##END##
let ret = Buffer.from(ary[1],'base64').toString()
return JSON.parse(ret).exp
},

verify: key => {
const hmac = crypto.createHmac('SHA256', key).update(ary[0]+ '.' + ary[1]).digest('base64');
return hmac === ary[2] + '='

}
}
}
24 changes: 24 additions & 0 deletions ex06/index1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const crypto = require("crypto");
module.exports.createToken = (token) => {
const ary = token.split(".");
if (ary.length !== 3) {
return;
}

return {
getExp: () => {
// ##BEGIN##
const payload = JSON.parse(new Buffer.from(ary[1], "base64"));
return payload.exp;
// ##END##
},

verify: (key) => {
const hmac = crypto
.createHmac("SHA256", key)
.update(ary[0] + "." + ary[1])
.digest("base64");
return hmac === ary[2] + "=";
},
};
};
Loading