• node.js + express 完成登录接口功能


    第一步创建文件并初始化

    yarn init

    第二步安装依赖 

    yarn add express nodemon

    nodemon 用于热更新
    第三步创建功能文件 (bodyParser 已删除请忽略)

    common/index.js 

    const fs = require('fs');
    // promisify 异步处理
    const { promisify } = require('util');
    const path = require('path');

    const readFile = promisify(fs.readFile)

    // 获取 json 数据
    const getFileData = async (fileName) => {
      const filePath = path.join(__dirname, `../json/${fileName}.json`)
      const data = await readFile(filePath, 'utf-8')
      return JSON.parse(data)
    }

    module.exports = {
      getFileData
    }

    json/userData.json

    [
      {
        "userName": "Fengchengzhi",
        "sex": "",
        "age": 25,
        "mobile": 123456,
        "mailbox": "xxxxx",
        "password": "123456"
      },
      {
        "userName": "root",
        "sex": "",
        "age": 25,
        "mobile": 123456,
        "mailbox": "xxxxx",
        "password": "123456"
      }
    ]

    router/login.js

    
    
    const express = require('express');
    // 获取 json 数据
    const { getFileData } = require('../common');

    const router = express.Router();

    // 登录
    router.post('/api/login', async(req, res) => {
      global.isLogin = true
      // 获取所有用户信息
      const allUserInfo = await getFileData('userData')
      const { userName, password } = req.body
      const info = allUserInfo.find(item => item.userName == userName)
      if (!info) {
        res.json({
          code: 500,
          data: null,
          message: '用户不存在!'
        })
      } else {
        if (info.password !== password) {
          res.json({
            code: 500,
            data: null,
            message: '密码错误!'
          })
        } else {
          res.json({
            code: 200,
            data: info,
            message: '登录成功!'
          })
        }
      }
    })

    // 退出登陆
    router.post('/api/loginOut', (req, res) => {
      global.isLogin = false
      res.json({
        code: 200,
        data: null,
        message: '退出登录成功!'
      })
    })

    module.exports = router;
     

    index.js

    
    
    const express = require('express');
    const app = express();
    const login = require('./router/login');
    const menu = require('./router/menu');

    // 登录状态
    global.isLogin = false

    // 解析 application/json 数据
    app.use(express.json())
    // 解析 application/x-www-form-urlencoded 数据
    app.use(express.urlencoded())

    // 登录拦截
    app.all('*', (req, res, next) => {
      if (req.url !== '/api/login') {
        if (!global.isLogin) {
          return res.json({
            code: 304,
            data: null,
            message: '未登录!'
          })
        }
      }
      next()
    })

    // router
    app.use('/', login);
    app.use('/', menu);

    app.listen(5000, () => {
      console.log('服务启动')
    })
     

    package.json

    {
      "name": "node-api",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "dependencies": {"express": "^4.17.3",
        "nodemon": "^2.0.15"
      },
      "scripts": {
        "start": "nodemon index.js"
      }
    }

    启动 yarn start

    测试结果 (注意这里的请求是做过跨域处理的)

     

  • 相关阅读:
    追随我心
    开心孕期创业经验和教训总结
    记和老友李吃饭
    如何理解hashCode的作用:
    周计划(2014.08.05~2014.08.10)
    个人职业提升内容
    个人职业发展分析和实现方法
    go 实现的排序算法
    xxx go内置函数
    6.并发
  • 原文地址:https://www.cnblogs.com/fczbk/p/16034019.html
Copyright © 2020-2023  润新知