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"); // 读取文件的 Stream
var 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();