node.js全栈项目

news2025/1/18 5:33:16

一、项目介绍

本项目适合作为一个课程设计或者毕业设计,最终实现了一个完整的博客系统,包括用户的登录、注册,图片上传,文章的发布、富文本编辑器、删除、编辑、修改、列表展示,评论的发布、删除、列表展示,以及实现了用户的文章和评论的后台管理和博客的前台展示和评论功能。

二、涉及技术

    • HTML+CSS+JavaScript(涉及ES6以后新增内容)
    • node.js
    • Express框架
    • mongoDB

三、涉及软件

  1. VScode(编写代码)

  1. APIpost(接口调试)

  1. node.js(后端工作)

  1. robo3t(操作数据库)

四、项目展示

1.注册页面

选择文件即为选择头像

2.登录页面

输入用户名和密码会在数据库中进行匹配,错误则无法登录

3.博客主页面

该项目会记录浏览量以及评论量,以及发布时间和作者

5.文章主页面

系统会按照时间展示评论,以及评论人的昵称和评论时间

6.用户发布文章主界面

在这里用户任意编辑文章发布,包括插入图片,同时可以查看自己之前博客,也可以对其编辑或者删除

7.删除评论功能

在用户编辑文章页面,可以修改文章,同时也可以删除别人评论

五、代码展示

后端框架(利用Express生成的脚手架)

前端页面设计

服务器的启动以及调用各种中间件

var createError = require("http-errors");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");
let { expressjwt } = require("express-jwt");

var articlesRouter = require("./routes/articles");
var usersRouter = require("./routes/users");
var uploadRouter = require("./routes/upload");
var commentsRouter = require("./routes/comments");

var articlesFrontRouter = require("./routes/front/articles");
var commentsFrontRouter = require("./routes/front/comments");

var app = express();

//设置跨域访问
app.all("*", function (req, res, next) {
  //设置允许跨域的域名,*代表允许任意域名跨域
  res.header("Access-Control-Allow-Origin", req.headers.origin || "*");
  //允许的header类型
  res.header(
    "Access-Control-Allow-Headers",
    "Content-Type, Authorization, X-Requested-With"
  );
  // //跨域允许的请求方式
  res.header(
    "Access-Control-Allow-Methods",
    "PATCH,PUT,POST,GET,DELETE,OPTIONS"
  );
  // 可以带cookies
  res.header("Access-Control-Allow-Credentials", true);
  if (req.method == "OPTIONS") {
    res.sendStatus(200).end();
  } else {
    next();
  }
});

// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));

//解析jwt
app.use(
  expressjwt({
    secret: "test12345",
    algorithms: ["HS256"],
  }).unless({
    // 要排除的 路由
    path: [
      "/api/users",
      "/api/upload",
      /^\/api\/articles\/users\/\w+/,
      {
        url: /^\/api\/articles\/\w+/,
        methods: ["GET"],
      },

      // 前台两个文章接口不需要权限
      "/api/front/articles",
      {
        url: /^\/api\/front\/articles\/\w+/,
        methods: ["GET"],
      },
      {
        url: /^\/api\/front\/comments\/articles\/\w+/,
        methods: ["GET"],
      },
    ],
  })
);

app.use("/api/users", usersRouter);
app.use("/api/upload", uploadRouter);
app.use("/api/articles", articlesRouter);
app.use("/api/comments", commentsRouter);
app.use("/api/front/articles", articlesFrontRouter);
app.use("/api/front/comments", commentsFrontRouter);

app.use(function (err, req, res, next) {
  if (err.name === "UnauthorizedError") {
    res
      .status(401)
      .json({ code: 0, msg: "无效的token或者没有没有传递token-请重新登录" });
  } else {
    next(err);
  }
});
// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get("env") === "development" ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render("error");
});

module.exports = app;

(代码过多不一一展示了)

六、源码及配套软件

需要源码和配套软件的朋友可以私信我

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/161908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K2P padavan固件下宽带与IPTV融合

一、我的需求 坐标江苏小城,原来手机用的99的套餐,可以免费带一个副卡,现在升级了电信129的5G融合套餐,送了一个iTV(一个月10元),但是副卡收费10元,哎,算来算去都没有运营…

【软考】系统集成项目管理工程师(十三)项目干系人管理

一、项目干系人管理基础二、干系人管理子过程1. 识别干系人2. 规划干系人管理3. 管理干系人4. 控制干系人参与一、项目干系人管理基础 项目干系人管理是指对项目干系人需求、希望和期望的识别,并通过沟通上的管理来满足 其需要、解决其问题的过程。 每个项目都有干系人,他们…

雅思经验(3)

听力技巧:section 1错1,section 2错2,section 3错5,section 4错5,共错13题,才擦边达到6.5分。听力的关键点在于2和4,因为1和3的场景基本可以固定下来。剑9的section3那个Soiros同学真的很可怕,印度人,口音真的非常重,但…

LVGL基础部件学习笔记

目录 1、基础对象基本属性用法(所有部件都可以用) 1.1、基础对象的大小(Size) 1.2、基础对象的位置(Position) 1.3、基础对象对齐(Alignment) 1. 4、基础对象的盒子模型(border-box) 1.5、基础对象的样式(styles) 1.6、基础对象的事件(events) 2…

小偷与守望者.math库.动态规划.贪心.C

1.分别讨论0或1;边界 2.写出递推方程;最优子结构、状态转移方程、重叠子问题 int rob(int* arr, int size){ int dp[size];int result; if(size0)return 0; if(size1)return arr[0]; else{ dp[0]arr[0]; dp[1]arr[1] > arr[0] ? arr[1]:arr[0]; for (int i 2; i < siz…

php学习笔记-连接操作mysq数据库(基础)-day08

php学习笔记-连接操作mysq数据库-day08php中常用的mysql操作函数1.连接mysql服务器mysqli_connect()2.设置数据库字符集 和 发送sqlmysqli_query() 函数 可以用来设置数据库字符集。3.关闭mysql服务器连接mysqli_close();4.选择要操作的数据库mysqli_select_db()5.结果集释放my…

C#大型在线学习平台源码(PC端+手机端)

本套源码目录结构清晰、代码层次分明、文档齐全。源码分享&#xff01;需要源码学习可私信我获取。 系统简介 中小学教育平台是一个集学、练、考于一体的在线教育平台&#xff0c;可以帮助中小学教育机构建设网络课堂&#xff0c;用于同步课程、专题课堂、兴趣课堂等网络教育的…

当用户输入一堆这样的字符串到 Elasticsearch ?

1、问题引出如下样例数据已导入 Elasticsearch&#xff0c;如何实现特定字段检索&#xff1f;并计算出特定子字段的长度&#xff1f;"message": "[策略排序]排序后结果:[{\"intentItems\":[\"200001\"],\"level\":1,\"modul…

2021帆软杯一等奖 | 《游乐园综合管理系统》

# 作品主题——游乐园综合管理系统 #作品简介&#xff1a;该获奖作品来自零代码开发赛道。针对一些个人经营、没有统一规范的游乐园&#xff0c;希望通过创建一个简单、高效的系统应用&#xff0c;管理人员能够通过对表单的简单操作就能管理游乐园&#xff0c;如获取工作人员信…

程序分析-动态程序切片

最近在调研符号执行工具优化方式时&#xff0c;发现好几篇工作都用到了动态程序切片&#xff0c;以前大部分接触的都是静态切片&#xff0c;对动态切片几乎不了解。所以开始学习动态切片&#xff0c;我主要参考的是90年的一篇上古paper。 1.静态依赖图和静态切片 说到程序切片…

Obsidian Templater 批量新建笔记

Obsidian Templater 批量新建笔记 背景 工作中的新项目都有这么几个固定的笔记&#xff0c;比如项目背景、原理图设计、PCB设计、调试等&#xff0c;每个笔记文件又有一些固定的内容&#xff0c;想着在开始一个新项目时&#xff0c;一次性把这些笔记都建好&#xff0c;并且统…

一文教会你 如何在Github中创建仓库?如何将多个项目放到一个仓库中管理?如何将本地项目上传到GitHub中?

文章目录前言1、如何在GitHub中创建仓库1.1 点击New repository1.2 填写仓库的基本信息1.3 完成创建2 、克隆仓库地址到本地2.1 克隆地址2.2 克隆到本地2.3 将后端代码项目提交到远程服务器2.4 将前端代码项目提交到远程服务器3、Github上查看自己上传项目代码4、使用这个方式存…

【程序分析】Code Lifting

我理解&#xff0c;Code Lifting和反编译的概念类似 常规的编译过程是这样的&#xff1a; 这是一个从高级形式到低级形式的过程&#xff0c;一般叫做 lowering 而反编译&#xff0c;是这样一个过程&#xff1a; 这个过程是完全相反的&#xff0c;叫做lifting 需要注意 Bi…

FPGA:逻辑函数的卡诺图化简法

文章目录最小项与最小项表达式最小项的定义最小项的性质逻辑函数的最小项表达式卡诺图化简法用卡诺图表示逻辑函数卡诺图的引出两变量卡诺图三变量卡诺图四变量卡诺图已知逻辑函数真值表&#xff0c;画卡诺图已知逻辑函数画卡诺图用卡诺图化简逻辑函数化简的依据化简的步骤用卡…

Hexo + Butterfly 侧边栏公众号

原文链接 &#xff1a;Hexo Butterfly 侧边栏公众号 推荐阅读 基于 Hexo 从零开始搭建个人博客&#xff08;一&#xff09;: 环境准备基于 Hexo 从零开始搭建个人博客&#xff08;二&#xff09;: 项目初识基于 Hexo 从零开始搭建个人博客&#xff08;三&#xff09;: 主题安…

Lichee_RV学习系列--stream移植

Lichee_RV学习系列文章目录 Lichee_RV学习系列—认识Lichee Rv Dock、环境搭建和编译第一个程序 Lichee_RV学习系列—移植dhrystone 文章目录Lichee_RV学习系列文章目录一、stream简介二、源码下载三、文件移植1、makefile文件编译makefile文件移植四、运行结果五、移植过程中…

【尚硅谷】Java数据结构与算法笔记08 - 查找算法

文章目录一、查找算法介绍二、线性查找算法三、二分查找算法3.1 思路分析3.2 代码实现四、插值查找算法4.1 思路分析4.2 代码实现4.3 注意事项五、斐波那契&#xff08;黄金分割法&#xff09;查找算法5.1 思路分析5.2 原理讲解5.3 代码实现一、查找算法介绍 在 java 中, 我们…

C++多线程入门及基础知识

什么是C多线程 线程即操作系统进行CPU任务调度的最小单位。C的多线程并发&#xff0c;简单理解的话就是&#xff0c;将任务的不同功能交由多个函数实现&#xff0c;创建多个线程&#xff0c;每个线程执行一个函数&#xff0c;一个任务就同时由不同线程执行。 什么时候使用多…

微信小程序:骨架屏的实现方法

骨架屏是为了展示一个页面骨架而不含有实际的页面内容&#xff0c;从渲染效率上来讲&#xff0c;骨架屏它并不能使首屏渲染加快。由于骨架屏的一些使用又向用户渲染了额外的一些内容&#xff0c;这些内容是额外添加的、本来是不需要渲染的&#xff0c;它反而从整体上加长了首屏…

Windows 虚拟磁盘驱动开发(采用原始办法实现类似Storport框架的相同功能)

其实以前讲述windows平台下的磁盘驱动的开发挺多&#xff0c;而且时间也是非常早。以下连接&#xff1a;https://blog.csdn.net/fanxiushu/article/details/9903123?spm1001.2014.3001.5501https://blog.csdn.net/fanxiushu/article/details/11713357?spm1001.2014.3001.5501…