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 wheel文件详细介绍

    下面是我对“Python wheel文件详细介绍”的完整攻略: Python wheel文件详细介绍 什么是Python wheel文件 Python wheel文件是一种Python软件包的二进制分发格式,可以在安装过程中提供更好的性能和可靠性。它可以将整个Python包打包为一组文件,并包括其依赖项、扩展和选项的编译扩展。 与传统的Python软件包格式…

    人工智能概论 2023年5月25日
    00
  • 深入学习spring cloud gateway 限流熔断

    深入学习Spring Cloud Gateway 限流熔断攻略 什么是Spring Cloud Gateway Spring Cloud Gateway是一个构建在Spring Framework 5,Project Reactor和Spring Boot 2之上的网关,可以作为所有基于HTTP路由的API的入口点。它提供了一种简单而有效的方式来传递客户端请…

    人工智能概览 2023年5月25日
    00
  • Python 文件和输入输出小结

    针对 Python 文件和输入输出小结的完整攻略,以下是详细的讲解: 1. 文件 在 Python 程序中,文件操作是非常常见的操作之一。Python 中读写文件分为文本文件和二进制文件。 (1) 打开文件 在 Python 中打开文件有两种方式,一种是通过 open() 函数打开,另一种是通过 with 语句打开。其中,通过 with 语句打开文件是比较好…

    人工智能概览 2023年5月25日
    00
  • 一键备份gitolite服务器的Shell脚本

    下面是“一键备份gitolite服务器的Shell脚本”的完整攻略: 1. 需求分析 gitolite是一款优秀的Git仓库管理工具,用于管理Git项目权限和访问。在使用gitolite时,我们需要对服务器进行备份以确保数据安全性。因此,需要编写一个Shell脚本,一键备份gitolite服务器。 2. 编写Shell脚本 2.1 确定备份目录和备份文件名称…

    人工智能概览 2023年5月25日
    00
  • Nginx服务器高性能优化的配置方法小结

    下面我将详细讲解“Nginx服务器高性能优化的配置方法小结”: Nginx服务器高性能优化的配置方法小结 一、使用Nginx Gzip压缩功能 Nginx可以对输出进行压缩,减小传输量,优化网站性能,这个功能需要更改Nginx默认配置文件(/etc/nginx/nginx.conf)。如下: gzip on; gzip_min_length 1k; gzip…

    人工智能概览 2023年5月25日
    00
  • TensorFlow.js实现AI换脸使用示例详解

    TensorFlow.js实现AI换脸使用示例详解 简介 TensorFlow.js是一个让我们可以在浏览器中运行深度学习模型的JavaScript库。它允许我们在浏览器中训练和部署机器学习模型,也可以在浏览器中使用已经训练好的模型,而无需任何服务器。 AI换脸是一种近年来比较流行的应用,它可以将两个人的脸合成在一起。本次将介绍如何使用TensorFlow.…

    人工智能概论 2023年5月24日
    00
  • php实现Mongodb自定义方式生成自增ID的方法

    实现自定义方式生成自增ID的方法主要包括以下步骤: 配置Mongodb环境 首先需要安装和配置Mongodb环境,可以参考官方文档进行安装和配置。同时需要安装mongodb的php扩展,可以通过pecl命令进行安装,如下: pecl install mongodb 创建集合和索引 在Mongodb中,需要先创建对应的集合和索引,例如可以创建一个名为“demo…

    人工智能概论 2023年5月25日
    00
  • ubuntu 下的nginx服务器配置详解

    下面就是 Ubuntu 下的 Nginx 服务器配置详解的完整攻略。 准备工作 在开始 Nginx 服务器的配置之前,你需要在 Ubuntu 系统上安装 Nginx。可以使用以下命令在命令行中进行安装: sudo apt update sudo apt install nginx 安装完成后,你可以使用以下命令检查 Nginx 是否成功安装: nginx -…

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