二、nodejs连接数据库实现登录功能

发布于:2024-05-07 ⋅ 阅读:(25) ⋅ 点赞:(0)

// 数据库下载可以用这个

DBeaver安装与使用教程(超详细安装与使用教程),好用免费的数据库管理工具_dbeaver使用教程-CSDN博客

模块化

(1)新建一个叫Dao的文件夹,存接数据库代码

// 参考数据库

(2)下载依赖

npm install mysql

(3)写连接数据库代码

数据库密码不能用123456,不安全

模块化要用中间件的写法

中间件语法
var app = express();
app.use(function (req, res, next) {
   next();
})

Dao->index.js

/**
 * 数据库连接
 */
const mysql = require('mysql');
const DataBase = mysql.createConnection({
        host: 'localhost',
        user: '用户名',
        password: '密码',
        database: '数据库名字',
})
//连接方法异步
const goconnect = ()=>{
    DataBase.connect();
    setTimeout(()=>{
            console.log('数据库连接成功');
    },2000)
}
//暴露出数据库去
module.exports={
        connect:goconnect,
        db:DataBase
    }

(4)写接口文件

创建文件1

const express = require('express')
const router = express.Router()
router.get('login/', (req, res) => {

})
module.exports = router

创建文件2

const express = require('express');
const router = express.Router();
const Dao = require('../Dao/index');
router.post('/login', (req, res) => {
        const sql = "SELECT password from user where username = ?"
        Dao.db.query(sql,req.body.username,(err,result)=>{
        console.log(result,'用户名密码');
    })
        res.send('hello')
})
module.exports = router

(5)在index里进行管理和使用

/**
 * 1.引入一个express框架
 * 2.在加载所有服务模块前,要先连接数据库
 * 安装body-parser中间件解析JSON数据,引入
 */
const express = require('express');
const app = express();
const DataBase = require('./Dao/index');
const bodyParser = require('body-parser');
app.use(bodyParser.json());
DataBase.connect();//连接数据库
/**
* 3.中间件,使用Service的接口 发送网络请求
*/
app.use('/api/Login',require('./Service/login'))
app.use('/api/User',require('./Service/user'))
/**
* 4.规定服务的端口号
*/
app.listen(3000,()=>{
       console.log('server is running at http://localhost:3000');
})

(6)router的使用

const express = require('express');
//引用定义router
const router = express.Router();
//连接数据库
const Dao = require('../Dao/index');
//获取数据库的用户名密码等逻辑
router.post('/login', (req, res) => {
        const sql = "SELECT password from user where username = ?"
        Dao.db.query(sql,req.body.username,(err,result)=>{
        console.log(result,'用户名密码');
    })
        res.send('hello')
})
module.exports = router

(7)测试

测试成功

(8)实现登录

user.js

const express = require('express');
const router = express.Router();
const Dao = require('../Dao/index');
router.post('/login', (req, res) => {
        const sql = "SELECT password from user where username = ?"
        Dao.db.query(sql,req.body.username,(err,result)=>{
        // console.log(result,'用户名密码');
        if(req.body.password == result[0].password){
               res.send({
                code:200,
                data:{
                    msg:'登录成功',
                    data:result
                }
            })
        }else{
            res.send({
                code:200,
                data:{
                    msg:'登录失败',
                    data: []
                }      
            })
        }
    })
})
module.exports = router

测试返回(一定看好是不是数据库表内的账号密码)

(9)功能实现

import axios from "./request";
//这是首页数据的接口
export const getApiHomeData=(param)=>{
    return axios.request({
        url:'/home/getHomeData',
        method:'get',
        data:param
    })
}
export const login = (data)=>{
    return axios.request({
        url:'/api/User/login',
        method:'post',
        data:data
    })
}

登录页面参数引入

  import { login } from '../../api/api'
        const onSubmit = async value => {
          const res = await login({
            username:data.username,
            password:data.password
          })
          console.log(res,"登录日志");
          if(res.msg==='登录成功'){
            router.push('/')
            Toast('登录成功')
          }else{
            Toast('用户名或密码错误')
          }
        };

报了跨越的错误

解决方法

在nodejs内允许访问域名,header,和跨域的请求的方式

index.js

/**
 * 1.引入一个express框架
 * 2.在加载所有服务模块前,要先连接数据库
 * 安装body-parser中间件解析JSON数据
 */
const express = require('express');
const app = express();
const DataBase = require('./Dao/index');
const bodyParser = require('body-parser');
app.use(bodyParser.json());
DataBase.connect();//连接数据库
/**
 * 3.中间件,使用Service的接口 发送网络请求
 */
/**配置公共请求响应头 */
app.all('*',(req,res,next)=>{
  // console.log('请求进来了');
  res.header("Access-Control-Allow-Origin","*");//允许跨域域名
  res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');//允许跨域的header类型
  res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");//允许跨域的请求方式
    next();
})
app.use('/api/Login',require('./Service/login'))
app.use('/api/User',require('./Service/user'))
app.use('/api/home',require('./Service/home'))
   /**
    * 4.规定服务的端口号
    */
app.listen(3000,()=>{
       console.log('server is running at http://localhost:3000');
   })

启动

node .\index.js

登录成功