nodejs项目实战(带源码)

nodejs项目实战

    • 主要实现功能
        • 用户模块
        • 文章分类模块
        • 文章模块
        • 核心代码
      • 数据库
        • 完整代码

主要实现功能

本项只适合新手,是一个接口类的项目,主要涉及一些增删改查功能以及三方包的使用,主要包括用node实现写用户登录注册,添加删除文章,添加删除分类的接口等,完整代码在末尾

用户模块

用户登录
用户注册
查询用户信息
更新用户信息
重置用户密码
更换用户头像

文章分类模块

获取文章分类
添加分类
根据id删除分类
根据id获取分类
根据id跟新分类

文章模块

获取所有文章信息
添加文章
删除文章

核心代码

项目入口文件app.js
cors 处理跨域请求
expressJWT 验证token字符串
app.use(express.json()) 解析前端发送的json数据

app.use(expressJWT({secret:'123456'}).unless({path:[/^\/api\//]}))

这个中间件是用来解析token,并验证除/api开头以外的所有接口访问都需要token

const express = require('express')
const cors = require('cors')
const expressJWT = require("express-jwt");const app = express()//处理跨域请求
app.use(cors())//解析数据
app.use(express.json())      
// app.use(express.urlencoded({extends:false}))//解析token
app.use(expressJWT({secret:'123456'}).unless({path:[/^\/api\//]}))//路由模块
const userRouter = require("./router/user.js")
app.use('/api',userRouter)
const userInfo = require("./router/userInfo.js")
app.use('/my',userInfo)
const artcate = require("./router/artcate.js")
app.use('/my',artcate)
const article = require("./router/article.js")
app.use('/my',article)//错误级别中间级
app.use((err,req,res,next)=>{if (err) {console.error(err.message);res.status(err.status || 500).json({ error: err.message });}
})app.listen(3000,()=>{console.log("serve is running at http://127.0.0.1:3000")    
})

数据库配置文件,重点是要记得导出module.exports = db

const mysql = require('mysql')const db = mysql.createPool({host:"127.0.0.1",user:"root",password:"123456",database:"my_db"
})module.exports = db

剩下的就是路由模块,以user为例其他都是类似的
user.js

const express = require('express')//导入路由对应的处理函数
const userHandler = require("../router_handler/user.js")const router = express.Router()//注册
router.post('/register',userHandler.regUser)//登录
router.post('/login',userHandler.login)module.exports = router

路由处理函数
bcrypt 加密用户密码
jwt 生成token

const db = require("../db/index.js")const bcrypt = require('bcryptjs')const jwt  = require("jsonwebtoken")const secretKey = "123456"//用户注册处理函数
exports.regUser = (req,res)=>{const data = req.bodyconst sql = "select*from tb_users where username = ?"db.query(sql,data.username,(err,result)=>{if(err || result.length>0){return res.json({code:400,msg:"用户已存在"})}const sqlStr = "insert into tb_users (username,password) values (?,?)"data.password = bcrypt.hashSync(data.password,10)db.query(sqlStr,[data.username,data.password],(err,result)=>{if(err){return res.json({code:400,msg:err.message})}res.json({code:200,msg:"注册成功"})})})
}//用户登录处理函数userHandler.js
exports.login = (req,res)=>{const data = req.bodyconst sql = "select password from tb_users where username=?"db.query(sql,data.username,(err,result)=>{if(err||result==0){return res.json({code:400,msg:"该用户不存在"})}const storedHash = result[0].password;  // 获取存储的哈希值reslut是一个数组const passwordMatch =bcrypt.compareSync(data.password, storedHash)if(!passwordMatch){return res.json({code:400,msg:"用户名密码不匹配"})}const payload = {username: data.username, // 用户名// 其他用户相关的信息可以在这里添加};const token = jwt.sign(payload,secretKey,{expiresIn:'10h'})    //  设置token 有效时长10hreturn res.json({code:200,msg:"登录成功",token:'Bearer '+token})})
}

运行项目 node app.js

数据库

一共三个数据表,字段如下,可以自己建表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整代码

https://github.com/Traderxue/node-demo

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win系统环境搭建(三)——Windows安装maven

windows环境搭建专栏🔗点击跳转 win系统环境搭建(三)——Windows安装maven 本系列windows环境搭建开始讲解如何给win系统搭建环境,本人所用系统是腾讯云服务器的Windows Server 2022,你可以理解成就是你用的windows10…

基于Spring Boot+ Vue的健身房管理系统与实现

小熊学Java全能学面试指南:https://javaxiaobear.cn 摘要 随着健身行业的快速发展,健身房管理系统成为了提高管理效率和用户体验的重要工具。本论文旨在设计与实现一种基于前后端分离的健身房管理系统,通过前后端分离的架构模式,…

ThreadLocal线程局部变量

1.原理 ThreadLocal是用来保存当前线程数据的,每一个线程的内部都有一个ThreadLocalMap,当前这个map中存储了以当前ThreadLocal作键,具体的数据作值的一个个Entry对象。 为什么非得以ThreadLocal对象作键呢?因为一个线程可能使用了…

若依前端使用

初始化页面时,路由上加参数 多个菜单对应一个页面,默认查询的数据状态不一样 vue 页面上 通过 debugger; 查看所有的参数, 最后取到了

网络基础(一)

网络基础(一) 在本篇文章中,我会详细介绍网络的一些基础知识,之后也会有持续的更新来帮助大家学习网络,希望大家可以通过博客学到更多的知识! 了解网络 去百度查询可以知道,网络是由若干节点和…

Unity SteamVR 开发教程:用摇杆/触摸板控制人物持续移动(2.x 以上版本)

文章目录 📕教程说明📕场景搭建📕创建移动的动作📕移动脚本⭐移动⭐实时调整 CharacterController 的高度 📕取消手部和 CharacterController 的碰撞 持续移动是 VR 开发中的一个常用功能。一般是用户推动手柄摇杆&…

Netty2

文章目录 Netty2Netty入站与出站机制Netty的handler链的调用机制 Netty2 Netty入站与出站机制 基本说明: 1)netty的组件设计:Netty的主要组件有Channel,EventLoop,ChannelFuture,ChannelHandler&#xff…

SaaS架构C/S检验科LIS系统源码: 检验申请、标本编号、联机采集

适用于医院检验科实际需要的LIS管理系统, 实现检验业务全流程的计算机管理。从检验申请、标本编号、联机采集、中文报告单的生成与打印、质控图的绘制和数据的检索与备份。通过将所有仪器自身提供的端口与科室LIS系统中的工作站点连接,实现与医院HIS系统的对接。 通过门诊医生和…

如何使用ArcGIS中的Arcmap进行矢量和栅格数据裁剪?

在地理信息系统(GIS)中,我们经常需要处理各种空间数据,而矢量和栅格数据是最常见的两种数据类型。有时候,我们需要对数据进行裁剪,以提取出我们需要的特定区域的数据。本文将介绍如何使用ArcGIS中的Arcmap软件对矢量和栅格数据进行…

选择渲染农场的几个标准

随着电影、电视剧等影视作品的制作越来越依赖于计算机特效,渲染农场的使用也变得越来越普遍。渲染农场是一种利用大量计算机图形处理器(GPU)来加速渲染过程的服务。在选择渲染农场时,有几个标准可以帮助您确定哪个农场是适合您的项…

Unity3D C# 反射与特性的配合使用

需求分析 情况: 假如我们是一个动物园的管理员,我们需要统计园内的所有动物和动物的行为。 举例: 现在园区内有猫、狗和鸡。猫对应的行为是喵喵喵和卖萌,狗对应狗吠和干饭,鸡对应篮球和打鸣那么这时候我要统计这些&a…

在qml中将一个16进制表示的颜色加上透明度

在qml中,我们在指定控件的颜色时,可以直接通过16进制的字符串来表示,比如"#ff0000"; 这种方式也比较符合UI设计人员的使用习惯。 但是假如要在此颜色的基础上,加个透明度的话,就要重新计算一番,比…