前言
此文记录项目开发中的通用代码块及编码方法的总结。
一个最简单的服务器框架(NodeJS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const express = require("express");
const app = express();
const port = 3000;
app.get("/", (req, res) => res.send("Hello World!"));
app.listen(port, () => console.log(`Server running at http://127.0.0.1:${port}`) );
|
当服务器创建完成后,通过node server.js
进行启动服务器。
静态目录
所谓静态目录就是暴露出一个静态目录,常用于静态资源的引用。
1
| app.use(express.static(__dirname + "/public"));
|
设置请求头
使用all方法表示所有请求都必须先通过此该中间件。
须放在请求路由之前,如果放在逻辑路由后,会导致无法设置成功。
1 2 3 4 5 6 7 8 9 10
| app.all("*", (req, res, next) => { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Credentials", true); res.header( "Access-Control-Allow-Headers", "Content-Type,Content-Length,Authorization,Accept,X-Requested-With" ); res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); next(); });
|
cookie-session插件的使用
使用此插件主要是为了保持会话。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const cookieSession = require("cookie-session");
app.use( cookieSession({ name: "JDCJ", keys: ["123", "456", "xiaokang"], maxAge: 24 * 69 * 60 * 1000, }) ); app.get("/cookie", (req, res) => { req.session.id = 1; res.send("已建立ID"); });
|
清楚Cookie只需将其设置为null
即可。
模板引擎的使用
服务器逻辑
1 2 3 4 5 6 7 8
| app.set("views", "./views");
app.set("view engine", "pug");
app.get("/pug", (req, res) => { res.render("index", { title: "Hey", message: "Hello there!" }); });
|
视图文件index
1 2 3 4 5
| html head title= title body h1= message
|
请求参数获取(GET/POST)
GET
get请求可以直接获取参数,通过req.query
即可。
1 2 3 4 5
| app.get("/get", (req, res) => { console.log("query: ", req.query); console.log("id:", req.query.id); res.send(req.query); });
|
POST
post请求的参数不可以直接获取,需要使用body-parser
模块进行解析。
关于body-parser
更多使用参考:github
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.post("/post", (req, res) => { console.log(req.body); res.send(req.body); });
|
通过工具方法异步获取/读取文件内容
此场景应用于:需要读取一个文件,其内容需要被某个功能使用,可以将其在程序运行时读取,然后附加到request请求上。例如如下:
1 2 3 4 5 6
| let utils = require("./utils"); app.use(async function (req, res, next) { req.userData = await utils.readFile("user.json"); next(); });
|
async与await语法参考:async 函数
可以在工具库utils
中写读取的逻辑,通过await
函数等待工具库异步操作完成。
1 2 3 4 5 6 7 8 9 10 11 12
| readFile(fileName) { return new Promise((resolve, reject) => { fs.readFile(__dirname + `/data/${fileName}`, "utf-8", (err, data) => { if (err) { reject(err); return; } data = JSON.parse(data); resolve(data); }); }); },
|
导出一个模块
1 2 3 4 5 6 7 8 9
| let utils = { name: "666", log: function () { console.log("logs"); return "log"; }, };
module.exports = utils;
|
在其他js文件只需要通过require
引入这个文件即可.
1 2 3 4
| const utils = require("./utils.js");
utils.log();
|