Node.js - 项目实践之个人中心(四)

114 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

项目要求

通过一个小项目实践 Node.js 各个知识点。麻雀虽小,五脏俱全,这个项目会从 0~1,逐步完成所有需求。该项目实现接口有注册、登录、获取用户信息等等

截屏2022-05-28 下午11.35.33.png


个人中心

获取用户的基本信息

实现步骤
  • 初始化路由模块
  • 初始化路由处理函数模块
  • 获取用户的基本信息
初始化路由模块
  1. 创建 /router/userinfo.js 路由模块,并初始化如下代码

    // 导入 express
    const express = require('express')
    // 创建路由对象
    const router = express.Router()
    // 获取用户的基本信息
    router.get('/userinfo', (req, res) => {
        res.send('ok')
    })
    // 向外共享路由对象
    module.exports = router
    
  2. app.js 中导入并使用个人中心的路由模块

    // 导入并使用用户信息的路由模块
    const userInfoRouter = require('./router/userinfo')
    // 注意:以 /my 开头的接口,都是有权限的接口,需要进行 Token 身份验证
    app.use('/my', userInfoRouter)
    
初始化路由处理函数模块
  1. 创建 /router_handler/userinfo.js 路由处理函数模块,并初始化如下代码结构

    // 获取用户信息
    exports.getUserInfo = (req, res) => {
        res.send('ok')
    }
    
  2. 修改 /router/userinfo.js 中的代码如下

    // 导入 express
    const express = require('express')
    // 创建路由对象
    const router = express.Router()
    // 导入路由处理函数路由
    const userinfo_handler = require('../router_handler/userinfo')
    
    // 获取用户的基本信息
    router.get('/userinfo', userinfo_handler.getUserInfo)
    // 向外共享路由对象
    module.exports = router
    
获取用户的基本信息
  1. /router_handle/userinfo.js 头部导入数据库操作模块

    // 导入数据库操作模块
    const db = require('../db/index')
    
  2. 定义 SQL 语句

    // 根据用户的 id,查询用户的基本信息
    // 注意:为了防止用户的密码泄漏,需要排除 password 字段
    const sql = `select id, username, niekname, email, user_pic from ev_users where id=?`
    
  3. 调用 db.query() 执行 SQL 语句

    // 注意:req 对象上的 auth 属性,是 token 解析成功,express-jwt 中间件挂载上去的
    
    // 获取用户基本信息的处理函数
    exports.getUserInfo = (req,res) => {
    
        // 定义查询用户信息的 SQL 语句
        const sql = `select id, username, niekname, email, user_pic from ev_users where id=?`
    
        // 调用 db.query() 执行 SQL 语句
        db.query(sql,req.auth.id, (err, results) => {
    
            // 执行 SQL 语句失败
            if(err) return res.cc(err)
            // 执行 SQL 语句成功,但是查询的结果可能为空
            if(results.length !== 1) return res.cc('获取用户信息失败')
    
            // 用户信息响应给客户端
            res.send({
                status:0,
                message:'获取用户信息成功',
                data: results[0]
            })
        })
    }