node.js实现简单登录注册功能

下面是简单登录注册功能的 node.js 实现完整攻略。

1. 确定需求和技术栈

我们首先需要明确需求:实现用户的注册和登录功能。

而我们使用的后端技术栈包括:

  • Node.js
  • Express.js
  • MongoDB
  • HTML/CSS/JS (前端页面)

2. 设计数据库

我们需要设计一个用户的数据模型,在 MongoDB 中存储,可以使用 Mongoose 来操作 MongoDB。

const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
  username: {
    type: String,
    required: true,
    unique: true,
    trim: true,
  },
  password: {
    type: String,
    required: true,
  },
});

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

module.exports = User;

上面是用户的数据模型,包括用户名和密码两个字段。

3. 实现注册和登录

下面是注册和登录的示例代码:

const express = require('express');
const bodyParser = require('body-parser');
const bcrypt = require('bcrypt');
const User = require('./models/user');

const app = express();
const saltRounds = 10;

// 通过中间件解析请求体
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// 注册
app.post('/register', async (req, res) => {
  const { username, password } = req.body;
  const hashedPassword = await bcrypt.hash(password, saltRounds); // 对密码进行加密
  const user = new User({ username, password: hashedPassword });
  try {
    await user.save();
    res.send('注册成功');
  } catch (err) {
    console.error(err);
    res.status(500).send('注册失败');
  }
});

// 登录
app.post('/login', async (req, res) => {
  const { username, password } = req.body;
  const user = await User.findOne({ username });
  if (!user) {
    res.status(401).send('用户名不存在');
  } else {
    const validPassword = await bcrypt.compare(password, user.password); // 和数据库中的密码作比较
    if (validPassword) {
      res.send('登录成功');
    } else {
      res.status(401).send('密码错误');
    }
  }
});

// 监听端口
app.listen(5000, () => {
  console.log('Server started on port 5000');
});

上述代码中,我们使用 bcrypt 库对用户的密码进行了加密,对于注册和登录请求,可以分别通过 /register/login 的接口来实现。在 /login 接口中,我们也使用 bcrypt 库对明文密码进行加密,并将加密后的密码与数据库中的加密密码进行比较,从而实现登录。

4. 设计前端页面

最后,我们来设计前端页面,包括注册页面和登录页面。这里提供一个简单的示例页面:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>登录/注册页</title>
</head>

<body>
  <h1>注册</h1>
  <form action="/register" method="POST">
    <label for="username">用户名:</label>
    <input type="text" name="username" required>
    <br>
    <label for="password">密码:</label>
    <input type="password" name="password" required>
    <br>
    <input type="submit" value="注册">
  </form>

  <br>

  <h1>登录</h1>
  <form action="/login" method="POST">
    <label for="username">用户名:</label>
    <input type="text" name="username" required>
    <br>
    <label for="password">密码:</label>
    <input type="password" name="password" required>
    <br>
    <input type="submit" value="登录">
  </form>
</body>

</html>

我们通过 HTML 设计了一个包含注册和登录的页面,在表单中分别输入用户名和密码,然后通过 POST 请求将数据发送给后端接口。

至此,我们就成功实现了一个简单的登录注册功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js实现简单登录注册功能 - Python技术站

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

相关文章

  • MongoDB原子操作的8种方法

    MongoDB原子操作是指一个操作要么全部执行成功,要么全部失败回滚。 MongoDB的原子操作包括: 1. findAndModify:查询并修改一个文档。可以实现对一个文档的原子更新和查询。 示例: db.collection.findAndModify({ query: { name: 'Alice' }, update: { $i…

    MongoDB 2023年3月14日
    00
  • go build 通过文件名后缀实现不同平台的条件编译操作

    在Go语言中,可以使用go build命令将源代码编译成可执行程序。 Go提供了一种条件编译的特性,通过文件名后缀进行不同平台的条件编译操作。 具体的实现策略如下: 将不同平台的相同代码保存到以不同平台为后缀的文件中,然后在go build命令中指定需要编译的平台的后缀即可。 例如,我们在Windows和Linux环境下需要处理不同的逻辑,可以将它们放到两个…

    MongoDB 2023年5月16日
    00
  • MongoDB简介 MongoDB五大特色

    下面就为大家详细讲解“MongoDB简介 MongoDB五大特色”的完整攻略。 MongoDB简介 MongoDB是一种基于分布式文件存储的非关系型数据库(NoSQL)。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。MongoDB是由C++语言编写的,是一个开源的、面向文档的数据库管理系统。 MongoDB五大…

    MongoDB 2023年5月16日
    00
  • mongodb与sql关系型数据比较

    MongoDB和SQL是两种完全不同的数据库技术。SQL是关系型数据库,而MongoDB是文档型数据库。下面详细说明MongoDB和SQL的比较: 1. 数据结构 MongoDB是文档型数据库,存储的数据称为文档(document),这些文档是以键值对的形式存储在集合(collection)中。MongoDB的储存方式类似于JSON,非常灵活,可以存储不同类…

    MongoDB 2023年5月16日
    00
  • Navicat Premium连接mongodb详细教程

    Navicat Premium连接MongoDB详细教程 简介 Navicat Premium是一款功能强大的数据库管理工具,除了支持关系型数据库外,也支持连接非关系型数据库,如MongoDB。本文将详细介绍如何使用Navicat Premium连接MongoDB。 步骤 1. 下载并安装Navicat Premium 前往Navicat官网下载Navica…

    MongoDB 2023年5月16日
    00
  • MongoDB自动删除过期数据的方法(TTL索引)

    MongoDB自动删除过期数据的方法,是通过创建TTL索引的方式实现的。TTL(Time-To-Live)索引是一种特殊的索引,它会在一定的时间(由用户设置)过后删除已经失效的文档。下面我将详细讲解TTL索引的创建和使用过程,并提供两个示例说明。 创建TTL索引 TTL索引可以用于任何一个字段,但是通常使用类似于日期时间这样的字段。要创建一个TTL索引,需要…

    MongoDB 2023年5月16日
    00
  • 跟老齐学Python之使用Python查询更新数据库

    接下来我将为您讲解“跟老齐学Python之使用Python查询更新数据库”的完整攻略,包含以下两条示例说明。 简介 在本文中,我们将学习如何使用Python连接并操作数据库,包括查询、更新、插入和删除等操作,以及如何使用Python中的模块将数据存储到数据库中。 连接数据库 在Python中连接数据库需要使用相应的数据库模块。我们在这里使用Python中常用…

    MongoDB 2023年5月16日
    00
  • 深入理解MongoDB分片的管理

    深入理解MongoDB分片的管理 MongoDB的分片是一个重要的数据库高可用性和性能优化策略。本文将详细介绍如何在MongoDB中进行分片管理。 步骤一:分片键的选择 在分片之前,必须选择一个分片键。这个键将会被用于分片的目的,可以是任何一个字段。MongoDB将会根据这个键将数据划分到不同的分片上。 sh.shardCollection("te…

    MongoDB 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部