1 Star 2 Fork 0

Jane/myweb_bigevent_server

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
app.js 3.53 KB
一键复制 编辑 原始数据 按行查看 历史
Jane 提交于 2022-08-05 10:48 . feat:新增HTTP2
const port = 3007;
const spdy = require("spdy");
// 导入express
const express = require("express");
const path = require("path");
const fs = require("fs");
// 创建服务器实例化对象
const app = express();
// 验证表单规则,如果错误的话会抛出instanceof joi.ValidationError 的错误信息
const joi = require("joi");
// 导入并配置cors跨域中间件 注册为全局中间件
const cors = require("cors");
app.use(cors());
// 配置解析表单数据的中间件,注意:这个中间件,只能解析 application/x-www-form-urlencoded 格式的表单数据的中间件
app.use(express.urlencoded({ extended: false }));
// 托管静态资源
app.use("/uploads", express.static("./uploads"));
// 一定要在路由之前封装res.cc函数 用于封装错误响应 因为status都为1所以可以封装后更加简练
app.use((req, res, next) => {
// res.send({ status: 1, message: err.message })
// res.send({ status: 1, message: '注册用户失败,请稍后再试!' })
// 都要 转换成 res.cc
// err 的值可能是一个错误对象Error 也可能是一个错误的描述字符串(自定义的)
// status 默认为1 表示失败的情况 调用的时候可以自己改成0 表示成功
res.cc = function(err, status = 1) {
// 可以直接访问到外部的res
res.send({
status,
// 如果传入的是默认的错误对象 就发送 err.message
message: err instanceof Error ? err.message : err,
});
};
next();
});
// 一定要在路由之前配置 解析token的中间件
const config = require("./config"); // 自定义的全局配置
const expressJWT = require("express-jwt"); // express-jwt 用于将 JWT 字符串解析还原成 JSON 对象
// expressJWT({secret:secretKey}) 是用来解析Token的中间件
// .unless({path:[/^\/api\//]}) 正则表达 用来指定哪些接口不需要访问权限 这里是/api开头的不用访问权限
app.use(
expressJWT({ secret: config.jwtSecretKey }).unless({ path: [/^\/api\//] })
);
// 登录注册模块的 导入路由
const userRouter = require("./router/user");
// 路由中间件 记得添加统一路径/api;
app.use("/api", userRouter);
// 导入并使用用户信息路由模块
const userinfoRouter = require("./router/userinfo");
// 注意:以 /my 开头的接口,都是有权限的接口,需要进行 Token 身份认证
app.use("/my", userinfoRouter);
// 导出并使用文章分类的路由模块
const artCateRouter = require("./router/artcate");
// 文章分类 中间件 需要加统一的路径'/my/article'
app.use("/my/article", artCateRouter);
// 导入并使用文章的路由模块
const articleRouter = require("./router/article");
app.use("/my/article", articleRouter);
// 定义错误级别中间件
app.use((err, req, res, next) => {
// 表示数据验证失败,
if (err instanceof joi.ValidationError) return res.cc(err);
// 捕获身份认证失败的错误
if (err.name === "UnauthorizedError") return res.cc("身份认证失败!");
// 表示未知的错误
res.cc(err);
});
const options = {
key: fs.readFileSync(__dirname + "/certs/ca.key"),
cert: fs.readFileSync(__dirname + "/certs/ca.crt"),
};
console.log(options);
spdy.createServer(options, app).listen(port, (error) => {
if (error) {
console.error(error);
return process.exit(1);
} else {
console.log("Listening on port: " + port + ".");
}
});
// // 启动服务器
// app.listen(3007, () => {
// console.log("api server running at http://127.0.0.1:3007");
// });
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
NodeJS
1
https://gitee.com/yang-yu1997/myweb_bigevent_server.git
git@gitee.com:yang-yu1997/myweb_bigevent_server.git
yang-yu1997
myweb_bigevent_server
myweb_bigevent_server
master

搜索帮助