W5 done
This commit is contained in:
parent
0e2c114a84
commit
2c5995be3f
13 changed files with 632 additions and 0 deletions
89
w5/utils.js
Normal file
89
w5/utils.js
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
"use strict";
|
||||
|
||||
import { readFileSync } from "fs";
|
||||
import { IncomingMessage, ServerResponse } from "http";
|
||||
import { parse as urlParse } from "querystring";
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {ServerResponse} res
|
||||
* @param {String} filename
|
||||
* @param {Array.<Array.<String, Object>>} params
|
||||
*/
|
||||
export function renderTemplate(res, filename, params = []) {
|
||||
let templateText = readFileSync(filename, "utf-8");
|
||||
params.forEach(el => {
|
||||
const [k, v] = el;
|
||||
templateText = templateText.replace(new RegExp(`\{\{${k}\}\}`, "g"), v);
|
||||
});
|
||||
res.writeHead(200, { "Content-Type": "text/html" });
|
||||
res.write(templateText);
|
||||
res.end();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {IncomingMessage} req
|
||||
*/
|
||||
export function getCookies(req) {
|
||||
const list = {};
|
||||
const cookieHeader = req.headers?.cookie;
|
||||
if (!cookieHeader) return list;
|
||||
|
||||
cookieHeader.split(";").forEach(function (cookie) {
|
||||
let [name, ...rest] = cookie.split("=");
|
||||
name = name?.trim();
|
||||
if (!name) return;
|
||||
const value = rest.join("=").trim();
|
||||
if (!value) return;
|
||||
list[name] = decodeURIComponent(value);
|
||||
});
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {ServerResponse} res
|
||||
* @param {Object} cookies
|
||||
*/
|
||||
export function setCookies(res, cookies = {}) {
|
||||
res.setHeader(
|
||||
"Set-Cookie",
|
||||
Array.from(Object.keys(cookies))
|
||||
.map(e => `${encodeURIComponent(e)}=${encodeURIComponent(cookies[e])}`)
|
||||
.join(";")
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {ServerResponse} res
|
||||
* @param {String} path
|
||||
*/
|
||||
export function redirect(res, path) {
|
||||
res.statusCode = 307;
|
||||
res.setHeader("Location", path);
|
||||
res.end();
|
||||
}
|
||||
|
||||
export function consumePostForm(req) {
|
||||
return new Promise((resolve, reject) => {
|
||||
let body = "";
|
||||
req.on("data", function (data) {
|
||||
try {
|
||||
body += data;
|
||||
if (body.length > 1e6) {
|
||||
req.destroy();
|
||||
}
|
||||
} catch (e) { reject(e); }
|
||||
});
|
||||
req.on("end", function () {
|
||||
try {
|
||||
const post = urlParse(body);
|
||||
resolve(post);
|
||||
} catch (e) { reject(e); }
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue