Node+Express+MongoDB实现登录注册功能实例

  1. 准备工作

首先需要安装Node.js和MongoDB,并在本地创建一个数据库。然后使用命令行工具(或者使用可视化工具)创建users集合来存放用户相关信息。

接着使用NPM安装Express框架和相关的库(如body-parser、mongoose、bcrypt等),可以使用以下命令:

npm install express body-parser mongoose bcrypt --save
  1. 创建Express app和路由

首先在根目录创建一个app.js文件,并在其中引用需要的模块和库,将app对象实例化,并设置路由。

// app.js

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');

const app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// 设置路由
app.use('/auth', require('./routes/auth'));

module.exports = app;

在routes文件夹下新建一个auth.js文件,并设置路由。

// auth.js

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');

// 用户注册
router.post('/register', (req, res) => {
  // 获取请求的参数
  const { name, email, password } = req.body;

  // 判断用户信息是否已存在
  User.findOne({ email })
    .then(user => {
      if(user) {
        res.status(400).json({ message: '该邮箱已被注册!' });
      } else {
        const salt = bcrypt.genSaltSync(10);
        const hash = bcrypt.hashSync(password, salt);

        // 创建新用户
        const newUser = new User({
          name,
          email,
          password: hash
        });

        newUser.save()
          .then(user => {
            res.status(200).json({ message: '注册成功!', user });
          })
          .catch(err => {
            res.status(500).json({ message: err.message });
          });
      }
    })
    .catch(err => {
      res.status(500).json({ message: err.message });
    });
});

module.exports = router;
  1. 连接MongoDB数据库

为了能够连接MongoDB数据库,我们需要在app.js里面设置我们的数据库链接字符串,如下所示:

// app.js

const { MONGODB_URI } = require('./config');
mongoose.connect(MONGODB_URI, {
  useNewUrlParser: true,
  useUnifiedTopology: true
})
  .then(() => {
    console.log('MongoDB Connected!');
  })
  .catch(err => {
    console.error(err);
  });

其中,config.js文件保存了MongoDB数据库的链接信息。

  1. 创建和保存用户数据

在models文件夹下新建一个user.js文件,并定义User模型。

// user.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const UserSchema = new Schema({
  name: String,
  email: String,
  password: String
});

const User = mongoose.model('user', UserSchema);

module.exports = User;

然后在auth.js中引用User模型,并在注册路由中根据请求参数创建和保存新用户。

// auth.js

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const User = require('../models/user');

// 用户注册
router.post('/register', (req, res) => {
  // 获取请求的参数
  const { name, email, password } = req.body;

  // 判断用户信息是否已存在
  User.findOne({ email })
    .then(user => {
      if(user) {
        res.status(400).json({ message: '该邮箱已被注册!' });
      } else {
        const salt = bcrypt.genSaltSync(10);
        const hash = bcrypt.hashSync(password, salt);

        // 创建新用户
        const newUser = new User({
          name,
          email,
          password: hash
        });

        newUser.save()
          .then(user => {
            res.status(200).json({ message: '注册成功!', user });
          })
          .catch(err => {
            res.status(500).json({ message: err.message });
          });
      }
    })
    .catch(err => {
      res.status(500).json({ message: err.message });
    });
});

module.exports = router;
  1. 用户登录

在auth.js中添加登录路由,并在其中验证用户输入和数据库中存储的用户信息是否匹配。

// auth.js

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const User = require('../models/user');

// 用户注册
router.post('/register', (req, res) => {
  // 获取请求的参数
  const { name, email, password } = req.body;

  // 判断用户信息是否已存在
  User.findOne({ email })
    .then(user => {
      if(user) {
        res.status(400).json({ message: '该邮箱已被注册!' });
      } else {
        const salt = bcrypt.genSaltSync(10);
        const hash = bcrypt.hashSync(password, salt);

        // 创建新用户
        const newUser = new User({
          name,
          email,
          password: hash
        });

        newUser.save()
          .then(user => {
            res.status(200).json({ message: '注册成功!', user });
          })
          .catch(err => {
            res.status(500).json({ message: err.message });
          });
      }
    })
    .catch(err => {
      res.status(500).json({ message: err.message });
    });
});

// 用户登录
router.post('/login', (req, res) => {
  // 获取请求的参数
  const { email, password } = req.body;

  // 根据email查找用户
  User.findOne({ email })
    .then(user => {
      if(!user) {
        res.status(404).json({ message: '该用户不存在!' });
      } else {
        // 比对密码
        bcrypt.compare(password, user.password, (err, success) => {
          if(success) {
            res.status(200).json({ message: '登录成功!', user });
          } else {
            res.status(404).json({ message: '用户名或密码错误!' });
          }
        });
      }
    })
    .catch(err => {
      res.status(500).json({ message: err.message });
    });
});

module.exports = router;
  1. 示例说明

示例一:用户注册

在浏览器中输入创建的注册页面的URL,比如http://localhost:3000/register,填写用户信息表单,例如:

{
  "name": "test",
  "email": "test@demo.com",
  "password": "123456"
}

点击提交按钮后,服务器会将获取到的用户信息插入到MongoDB中的users集合中,返回注册成功的提示信息及用户的相关信息。

示例二:用户登录

在浏览器中输入创建的登录页面的URL,比如http://localhost:3000/login,填写登录信息表单,例如:

{
  "email": "test@demo.com",
  "password": "123456"
}

点击登录按钮后,服务器会根据输入的email从MongoDB中的users集合中获取用户信息,并进行密码比对,如果验证通过,返回登录成功的提示信息及用户的相关信息。如果密码比对失败,则返回用户名或密码错误的提示信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node+Express+MongoDB实现登录注册功能实例 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 详解如何设置Python环境变量?

    详解如何设置Python环境变量? 简介 Python是一种广泛使用的编程语言,但在安装Python后,需要进一步配置Python环境变量才能在终端中使用Python。在本文中,我将详细介绍如何设置Python环境变量。 步骤 以下是在Windows系统上设置Python环境变量的详细步骤: 打开开始菜单并右键单击“计算机”,然后选择“属性”。 点击“高级系…

    人工智能概览 2023年5月25日
    00
  • PHP下 Mongodb 连接远程数据库的实例代码

    下面是详细讲解“PHP下 Mongodb 连接远程数据库的实例代码”的完整攻略。 确认环境 在开始编写代码之前,我们需要确认以下环境是否已经准备好了: PHP >= 5.4.0 mongodb 扩展 如果你的环境没有准备好以上要求,可以参考以下步骤进行安装: 安装 PHP 以 Ubuntu 16.04 为例,我们可以使用以下命令安装 PHP: sudo…

    人工智能概论 2023年5月25日
    00
  • 部署django项目安装uwsgi出错的解决方法总结

    下面是详细讲解“部署django项目安装uwsgi出错的解决方法总结”的完整攻略。 部署django项目安装uwsgi出错的解决方法总结 1. 安装uwsgi时出现的错误 在对Django项目进行部署时,常常需要使用到uwsgi,但是在安装时可能会出现以下错误: Command "/usr/local/bin/python3.6 -u -c &qu…

    人工智能概览 2023年5月25日
    00
  • 利用Python通过获取剪切板数据实现百度划词搜索功能

    实现Python通过获取剪切板数据实现百度划词搜索功能,一般分为以下几个步骤: 1.安装必要的库:要实现这项任务,需要安装pyperclip和requests库。它们可以通过pip进行安装,命令如下: $ pip install pyperclip requests 2.剪切板数据获取:通过调用pyperclip库中的方法get()可以获取系统剪切板上的数据…

    人工智能概览 2023年5月25日
    00
  • Java+OpenCV调用摄像头实现拍照功能

    请听我讲解“Java+OpenCV调用摄像头实现拍照功能”的完整攻略。 1.环境准备 在实现拍照功能之前,我们需要先安装好OpenCV环境和Java开发环境。OpenCV是一款开源的计算机视觉库,可以用来实现图像和视频处理的功能;而Java开发环境则是实现代码编写的必备工具。 在安装完OpenCV和Java开发环境之后,我们还需要在Java项目中引入Open…

    人工智能概览 2023年5月25日
    00
  • Python缓存技术实现过程详解

    Python缓存技术实现过程详解 什么是缓存技术? 缓存技术是指在软件系统设计中,为了提高数据读写性能而采用的一种技术。它将数据存放在缓存存储器中,以供后续快速访问。 在Python中,缓存技术常用于优化函数的执行速度。由于某些复杂操作的计算较为耗时,为了避免重复计算,可以将计算结果缓存下来,以备下一次调用使用。 Python如何实现缓存技术? Python…

    人工智能概论 2023年5月25日
    00
  • Python虚拟环境virtualenv创建及使用过程图解

    Python虚拟环境virtualenv创建及使用过程图解 在进行Python开发时,虚拟环境是常用的技术。虚拟环境可以保证项目之间隔离,不会出现因为不同版本的依赖库发生冲突的问题,同时也能够方便的管理和随时更改虚拟环境的配置。 为什么需要虚拟环境 在Python中,我们通常使用pip来管理项目的依赖。当我们需要安装一个新的依赖库时,它会被安装在Python…

    人工智能概览 2023年5月25日
    00
  • C++求最大公约数四种方法解析

    C++求最大公约数四种方法解析 在C++编程中,求最大公约数是一个基础而重要的问题。此处我们将介绍四种常见的求最大公约数的方法,包括暴力枚举法、更相减损法、辗转相除法、以及辗转相减法。 1. 暴力枚举法 暴力枚举法是一种最基础的求最大公约数的方法,其思路基于枚举法。具体来说,我们可以简单地从较小数开始逆序枚举每一个可能的公约数,直到找到两个整数均能整除的最大…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部