01-event-1.js
const http = require("http");let request = { get url() { return this.req.url; },};let response = { get body() { return this._body; }, set body(val) { this._body = val; },};let context = { get url() { return this.request.url; }, get body() { return this.response.body; }, set body(val) { this.response.body = val; },};class Application { constructor() { // this.callback = () => {} this.context = context; this.request = request; this.response = response; this.middlewares = []; } use(callback) { this.middlewares.push(callback); // this.callback = callback; } compose(middlewares) { return function (context) { return dispatch(0); function dispatch(i) { let fn = middlewares[i]; if (!fn) { return Promise.resolve(); } return Promise.resolve( fn(context, function next() { return dispatch(i + 1); }) ); } }; } listen(...args) { const server = http.createServer(async (req, res) => { let ctx = this.createCtx(req, res); // await this.callback(ctx); const fn = this.compose(this.middlewares); await fn(ctx); ctx.res.end(ctx.body); // this.callback(req, res); }); server.listen(...args); } createCtx(req, res) { let ctx = Object.create(this.context); ctx.request = Object.create(this.request); ctx.response = Object.create(this.response); ctx.req = ctx.request.req = req; ctx.res = ctx.response.res = res; return ctx; }}module.exports = Application;
02-stream-1.js
var fs = require("fs");var readStream = fs.createReadStream("./data/file1.txt"); // 读取文件的 Streamvar length = 0;readStream.on("data", function (chunk) { length += chunk.toString().length;});readStream.on("end", function () { console.log(length);});
02-stream-2.js
var readline = require("readline");var fs = require("fs");var rl = readline.createInterface({ input: fs.createReadStream("./data/file1.txt"),});var lineNum = 0;rl.on("line", function (line) { lineNum++;});rl.on("close", function () { console.log("lineNum", lineNum);});
02-stream-3.js
var http = require("http");function serverCallback(req, res) { var method = req.method.toLowerCase(); // 获取请求的方法 if (method === "get") { } if (method === "post") { // 接收 post 请求的内容 var data = ""; req.on("data", function (chunk) { // “一点一点”接收内容 console.log("chunk", chunk.toString()); data += chunk.toString(); }); req.on("end", function () { // 接收完毕,将内容输出 console.log("end"); res.writeHead(200, { "Content-type": "text/html" }); res.write(data); res.end(); }); }}http.createServer(serverCallback).listen(8081); // 注意端口别和其他 server 的冲突console.log("监听 8081 端口……");
03-genarator-1.js
function* helloWorldGenerator() { yield "hello"; yield "world"; return "ending";}var hw = helloWorldGenerator();console.log(hw.next());console.log(hw.next());console.log(hw.next());console.log(hw.next());function* foo() { yield 1; yield 2; yield 3; yield 4; yield 5; return 6;}for (let v of foo()) { console.log(v);}
application.js
const http = require("http");let request = { get url() { return this.req.url; },};let response = { get body() { return this._body; }, set body(val) { this._body = val; },};let context = { get url() { return this.request.url; }, get body() { return this.response.body; }, set body(val) { this.response.body = val; },};class Application { constructor() { // this.callback = () => {} this.context = context; this.request = request; this.response = response; this.middlewares = []; } use(callback) { this.middlewares.push(callback); // this.callback = callback; } compose(middlewares) { return function (context) { return dispatch(0); function dispatch(i) { let fn = middlewares[i]; if (!fn) { return Promise.resolve(); } return Promise.resolve( fn(context, function next() { return dispatch(i + 1); }) ); } }; } listen(...args) { const server = http.createServer(async (req, res) => { let ctx = this.createCtx(req, res); // await this.callback(ctx); const fn = this.compose(this.middlewares); await fn(ctx); ctx.res.end(ctx.body); // this.callback(req, res); }); server.listen(...args); } createCtx(req, res) { let ctx = Object.create(this.context); ctx.request = Object.create(this.request); ctx.response = Object.create(this.response); ctx.req = ctx.request.req = req; ctx.res = ctx.response.res = res; return ctx; }}module.exports = Application;
server.js
// const http = require("http");// const server = http.createServer((req, res) => {// res.writeHead(200);// res.end("Hello WuChenDi");// });// server.listen(9092, () => {// console.log("server start on port 9092");// });const Dia = require("./application");const app = new Dia();function delay() { return new Promise((reslove, reject) => { setTimeout(() => { reslove(); }, 2000); });}app.use(async (ctx, next) => { ctx.body = "1"; await next(); ctx.body += "2";});app.use(async (ctx, next) => { ctx.body += "3"; await delay(); await next(); ctx.body += "4";});app.use(async (ctx, next) => { ctx.body += "5";});// app.use((req, res) => {// res.writeHead(200);// res.end("Hello WuChenDi");// });app.listen(9092, () => { console.log("server runing on port 9092");});
test.js
// let digot = {// _name: "Di-got",// get name() {// // console.log('value')// // return '你好'// return this._name;// },// set name(val) {// console.log("new name is " + val);// this._name = val;// },// };// console.log(digot.name);// digot.name = "wuchendi";// console.log(digot.name);// function add(x, y) {// return x + y;// }// function double(z) {// return z * 2;// }// const res1 = add(1, 2);// const res2 = double(res1);// console.log(res2);// const res3 = double(add(1, 2));// console.log(res3);// function add(x, y) {// return x + y;// }// function double(z) {// return z * 2;// }// const middlewares = [add, double];// let len = middlewares.length;// function compose(midds) {// return (...args) => {// // 初始值// let res = midds[0](...args);// for (let i = 1; i < len; i++) {// res = midds[i](res);// }// return res;// };// }// const fn = compose(middlewares);// const res = fn(1, 2);// console.log(res);async function fn1(next) { console.log("fn1"); await next(); console.log("end fn1");}async function fn2(next) { console.log("fn2"); await delay(); await next(); console.log("end fn2");}async function fn3(next) { console.log("fn3");}function delay() { return new Promise((reslove, reject) => { setTimeout(() => { reslove(); }, 2000); });}function 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); }) ); } };}const middlewares = [fn1, fn2, fn3];const finalFn = compose(middlewares);finalFn();