21-3-21 前段菜鸡写的垃圾 登录 注册 服务器

  • 时间:
  • 浏览:
  • 来源:互联网

自己写的服务器

今天做了一个vue的小案例 – 用户发送axios请求的登陆注册。(vue-cli@4.xx + mongoDB +node.js)

在网上搜了半半天,基本上都是用什么 express 生成的服务器包,试了两个发现完全行不通,要么数据请求不出来,要么就是跟着搞到一半,就直接完蛋,到最后没办法了,自己慢慢写了一个不太完善的 node 服务器。

服务器代码(直接复制就能启动的代码)

-package.json

{
  "dependencies": {
    "body-parser": "^1.19.0",
    "connect-mongo": "^3.2.0",
    "cookie-parser": "^1.4.5",
    "express": "^4.17.1",
    "express-session": "^1.17.1",
    "md5": "^2.3.0",
    "mongoose": "^5.11.10",
    "sha1": "^1.1.1"
  }
}

-server.js

const express = require('express')
const app = express()
app.disable('x-powered-by')
app.use(express.static(__dirname + '/public'))
const db = require('./db/db')
app.use(express.urlencoded({extended: true}))
const UIRouter = require('./router/UIRouter')
const loginRegisterRouter = require('./router/loginRegisterRouter')
const session = require('express-session')
const MongoStore = require('connect-mongo')(session);

 app.use(session({
      name: 'peiqi',   
      secret: 'atguigu',
      saveUninitialized: false, 
      resave: true ,
      store: new MongoStore({
      
      //这个地方要自己建立去数据库 建立 session 数据库   存储 session   写自己的数据库地址
          url: 'mongodb://localhost:27017/sessions_container',  
          
          touchAfter: 24 * 3600 
      }),
      cookie: {
          httpOnly: true, 
          maxAge: 1000*60*60*24*365*1000 
      },
    }));
    
db(() => {
    //app.use(UIRouter())
    app.use(loginRegisterRouter())
    //绑定端口监听
    app.listen(3000, (err) => {
        if (err) {
            console.log(err)
        } else {
            console.log('启动服务成功!')
        }
    })
}, (err) => {
    console.log(err)
})

-db(文件夹) - db.js

//直接更改变量的信息就行了,下面的函数不动
let mongoose = require('mongoose')
mongoose.set('useCreateIndex',true)
 const DB_NAME = 'xcc'//数据库名
const PORT = 27017//端口号
const IP = 'localhost'//主机IP

function connectMongo(callback) {
mongoose.connect(`mongodb://${IP}:${PORT}/${DB_NAME}`,
{ useNewUrlParser: true, useUnifiedTopology: true })
 mongoose.connection.once('open',function (err) {
    if (err) {
      console.log('数据库链接失败',err)
      callback('connect failed')
    } else {
      console.log('数据库连接成功')
      callback()
    }
  })
}
module.exports =connectMongo

-module(文件夹)-usersModule.js

//直接复制就行,也可以自己改一改
let mongoose = require('mongoose')
let Schema = mongoose.Schema
let usersRule = new Schema({
    email:{
        type:String,
        required:true,
        unique:true,
    },
    nick_name:{
        type:String,
        required:true,
    },
    password:{
        type:String,
        required:true,
    },
    date:{
        type:Date,
        default:Date.now()
    },
    enable:{
        type:String,
        default: 'y'
    },
})
module.exports  = mongoose.model('users',usersRule)

-router(文件夹) - loginRegisterRouter.js

直接复制就行

const {Router} = require('express')
let {resolve} = require('path')
let router = new Router()
let usersModule = require('../module/usersModule')
let md5 = require('md5')
router.post('/register',(req,res) => {
    res.setHeader('Access-Control-Allow-Origin','*')
    const {email,nick_name,password,re_password} = req.body
    const emailReg = /^[a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,10}\.com$/
    const nickNameReg = /[\u4e00-\u9fa5]/gm
    const passwordReg = /^[a-zA-Z0-9_@.+&]{6,20}$/
    const errMsg = {}
    if (!emailReg.test(email)) {
        // res.send('邮箱格式不合法,用户名必须4-20位,主机名必须2-10位')
        errMsg.emailErr = '邮箱格式不合法,用户名必须4-20位,主机名必须2-10位'
    }
    if (!nickNameReg.test(nick_name)) {
        // res.send('昵称格式不合法,必须是中文')
        errMsg.nickErr = '昵称格式不合法,必须是中文'
    }
    if (!passwordReg.test(password)) {
        // res.send('密码格式不合法,必须是6-20位')
        errMsg.passwordErr = '密码格式不合法,必须是6-20位'
    }
    if (password !== re_password) {
        errMsg.repasswordErr = '两次输入的密码不一样'
    }
    if (JSON.stringify(errMsg) !== '{}') {
        res.send({errMsg})
        return
    }
    usersModule.findOne({email}, function (err, data) {
        if (data) {
            console.log(`邮箱为${email}的用户注册失败,邮箱重复注册!`);
            errMsg.emailErr = `${email}邮箱已经被注册,请更换邮箱!`
            res.send({errMsg})
            return
        }
        usersModule.create({email, nick_name, password:md5(password)}, function (err, data) {
            if (!err) {
                console.log(`邮箱为${email}的用户注册成功`);
                res.send('注册成功!!!')
            } else {
                console.log(err);
                errMsg.networkErr = '当前网络不稳定,请稍后重试!'
                res.send({errMsg})
            }
        })
    })
})
router.post('/login', (req, res) => {
    res.setHeader('Access-Control-Allow-Origin','*')
    const {email, password} = req.body
    const emailReg = /^[a-zA-Z0-9]{3,20}@[a-zA-Z0-9]{2,10}\.com$/
    const passwordReg = /^[a-zA-Z0-9_@.+&]{6,20}$/
    const errMsg = {}
    if (!emailReg.test(email)) {
        errMsg.emailErr = '邮箱格式不合法,用户名必须4-20位,主机名必须2-10位'
    }
    if (!passwordReg.test(password)) {
        errMsg.passwordErr = '密码格式不合法,必须是6-20位'
    }
    if (JSON.stringify(errMsg) !== '{}') {
        res.send({errMsg})
        return
    }
    usersModule.findOne({email, password:md5(password)}, (err, data) => {
        if (err) {
            console.log(err);
            errMsg.networkErr = '网络不稳定,请稍后重试!'
            res.send({errMsg})
            return
        }
        if (data) {
            req.session._id = data._id.toString()
            res.send({data})
            return;
        }
        errMsg.loginErr = '用户名或者密码错误'
        res.send({errMsg})
    })
})
module.exports = function () {
    return router
}

本文链接http://www.dzjqx.cn/news/show-617249.html