nodejs个人博客开发第七步 后台登陆

下面我将详细讲解“nodejs个人博客开发第七步 后台登陆”的完整攻略。

1. 确定需求和设计页面

在开始开发后台登录功能之前,需要先确定需求和设计登录页面。在设计登录页面时,需要考虑以下几个方面:

  • 登录页面应该有输入账号和密码的表单,以及登录按钮。
  • 检查用户输入的账号和密码是否合法,如果不合法,则需要提示用户重新输入。
  • 如果用户输入的账号和密码正确,则跳转到后台管理主页。

在确定了以上需求之后,可以开始设计登录页面,并通过HTML和CSS进行页面的实现。

2. 开发后台登录功能

在完成页面设计之后,可以开始开发后台登录功能。开发后台登录需要用到以下技术:

  • Node.js:作为后端语言,用于编写后台登录的逻辑代码。
  • Express:作为Web框架,用于管理前端页面,并提供路由功能。
  • MongoDB:作为数据库,用于保存登录信息。

下面以示例代码的形式说明如何使用Node.js和Express开发后台登录功能。

2.1. 引入必要的包和模块

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);

const app = express();

在这段代码中,我们引入了Express、body-parser、mongoose和bcrypt等必要的包和模块,并创建了一个Express实例。

2.2. 连接数据库

mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true, useUnifiedTopology: true })
    .then(() => app.listen(3000, () => console.log('Server started on port 3000')))
    .catch(err => console.log(err));

在这段代码中,我们使用mongoose.connect连接到MongoDB数据库。连接成功后,启动服务器,并在控制台打印“Server started on port 3000”字样。

2.3. 创建数据模型

const userSchema = new mongoose.Schema({
    username: String,
    password: String
});

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

在这段代码中,我们创建了一个数据模型userSchema,包含username和password两个属性,然后将它们传入mongoose.model方法中,创建出User数据模型。

2.4. 配置session和session-store

app.use(session({
    secret: 'my-secret',
    resave: false,
    saveUninitialized: true,
    store: new MongoStore({
        mongooseConnection: mongoose.connection
    })
}));

在这段代码中,我们使用express-session和connect-mongo包来配置session和session-store。其中,secret用于对session数据进行加密,store指定使用MongoDB来保存session数据。

2.5. 配置路由

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

app.get('/login', (req, res) => {
    res.render('login');
});

app.post('/login', async (req, res) => {
    const { username, password } = req.body;

    const user = await User.findOne({ username });

    if (!user) {
        return res.redirect('/login');
    }

    const isValid = await bcrypt.compare(password, user.password);

    if (!isValid) {
        return res.redirect('/login');
    }

    req.session.user = user;

    res.redirect('/admin');
});

在这段代码中,我们使用app.use和bodyParser来配置请求体的解析方式,然后使用app.get和app.post方法来定义路由。其中,/login路由用于显示登录页面,/login POST路由用于实现登录逻辑。

2.6. 编写页面和样式

在这一步中,我们需要根据需求设计出登录页面,并使用HTML和CSS来进行样式的设置。

下面是一段用于实现多种视口的响应式界面的CSS代码示例:

@media only screen and (max-device-width: 600px) {
    #login__container {
        width: 100%;
        height: calc(100vh - 60px);
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
    }

    #login__title {
        margin-bottom: 20px;
    }
}

@media only screen and (min-device-width: 601px) and (max-device-width: 1280px) {
    #login__container {
        width: 100%;
        height: calc(100vh - 60px);
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
    }

    #login__title {
        margin-bottom: 20px;
    }
}

@media only screen and (min-device-width: 1281px) {
    #login__container {
        width: 400px;
        height: 400px;
        margin: auto;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
    }

    #login__title {
        margin-bottom: 20px;
    }
}

2.7. 用户验证和密码加密

在这一步中,我们使用bcrypt来对用户输入的密码进行加密,并使用findOne方法来查询数据库中是否存在对应的用户。如果数据库中存在对应的用户,则说明用户名和密码都正确,可以成功登录。

const user = await User.findOne({ username });

if (!user) {
    return res.redirect('/login');
}

const isValid = await bcrypt.compare(password, user.password);

if (!isValid) {
    return res.redirect('/login');
}

req.session.user = user;

res.redirect('/admin');

2.8. 检查登录状态

在后台管理主页中,需要检查用户是否已经登录。如果用户已经登录,则可以显示相应的管理内容;如果用户没有登录,则需要跳转到登录页面。

app.get('/admin', (req, res) => {
    if (!req.session.user) {
        return res.redirect('/login');
    }

    res.render('admin', { user: req.session.user });
});

在这一步中,我们使用req.session.user来判断用户是否已经登录。

3. 总结

以上就是“nodejs个人博客开发第七步 后台登陆”的完整攻略。在开发后台登录功能时,需要注意保护用户的账号和密码安全,使用bcrypt等加密技术保证用户的密码不会被窃取。同时,在使用用户登录状态时,需要使用session等会话控制技术进行管理,以保证用户的安全和隐私。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs个人博客开发第七步 后台登陆 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 利用nodejs读取图片并将二进制数据转换成base64格式

    读取图片并将二进制数据转换成base64格式的过程与Node.js的核心模块之一fs模块和编码转换模块Buffer相关。下面是详细的攻略: 1. 加载模块 首先,在 Node.js 中通过引入 fs 和 Buffer 模块来实现对图片的读取以及将二进制数据转换成 Base64 格式。在代码中使用 require() 方法载入这两个模块: const fs =…

    node js 2023年6月8日
    00
  • Node.js 文件夹目录结构创建实例代码

    下面是详细讲解“Node.js 文件夹目录结构创建实例代码”的完整攻略: 1. 基本概念 在开始创建文件夹目录结构之前,先来了解一下Node.js中常用的一些模块和概念: fs模块:用于对文件系统进行操作,例如创建目录、创建文件、读取文件、删除文件等操作; path模块:用于处理文件路径,例如获取文件名、文件扩展名、完整路径等操作; module.expor…

    node js 2023年6月8日
    00
  • node.js报错:npm ERR code EPERM的解决过程

    下面是针对npm ERR code EPERM报错的解决攻略: 问题分析 首先,我们需要明确该错误的意思和原因。 npm:node.js的包管理器。 ERR:错误的缩写。 code EPERM:访问权限错误。 因此,简单来说,这个错误提示表示我们试图访问某些文件或目录的权限不足,通常是由于缺少管理员权限或文件系统权限问题导致的。这种情况下,npm 可能会拒绝…

    node js 2023年6月8日
    00
  • 浅谈js之字面量、对象字面量的访问、关键字in的用法

    JS之字面量 在JavaScript中,字面量是指在代码中硬编码出现的固定值,例如字符串、数字、布尔值等。字面量在JS中非常常见且易于使用,下面是一些常见的字面量类型: 数值字面量 使用数值字面量可以直接创建数字类型,可以是整数或浮点数: let num1 = 10; // 整数 let num2 = 3.14; // 浮点数 字符串字面量 使用字符串字面量…

    node js 2023年6月8日
    00
  • JavaScript双向链表实现LRU缓存算法的示例代码

    首先,我们需要了解下什么是双向链表和LRU缓存算法。 双向链表:每个节点有两个指针,一个指向其前驱节点,一个指向其后继节点。双向链表的优势在于可以快速对链表中的任意节点进行插入、删除和移动操作,时间复杂度均为O(1)。 LRU缓存算法:Least Recently Used,即最近最少使用。LRU缓存算法通过记录缓存中每个数据项的访问时间,当缓存空间满时,将…

    node js 2023年6月8日
    00
  • NodeJs下的测试框架Mocha的简单介绍

    下面我就为你详细讲解NodeJs下的测试框架Mocha的简单介绍。 Mocha简介 Mocha是一个基于Node.js的JavaScript测试框架,可以在服务器端运行测试脚本,也可以在浏览器中使用。它提供了丰富的方法和API来进行测试,包括测试用例的编写、测试覆盖率的分析、异步代码的测试等。Mocha最重要的特点是其灵活性,可以搭配各种断言库(Assert…

    node js 2023年6月8日
    00
  • vscode 调试 node.js的方法步骤

    下面是详细讲解“vscode 调试 node.js的方法步骤”的完整攻略: 前置条件 安装 Node.js 和 Visual Studio Code; 对 Node.js 和 TypeScript 有基本的了解。 方法步骤 打开 Visual Studio Code,打开项目文件夹; 在项目根目录下创建 .vscode 目录,若已经存在则跳过; 在 .vsc…

    node js 2023年6月8日
    00
  • JavaScript中ES6 Babel正确安装过程

    当我们想要在JavaScript中使用ES6语法的时候,我们会发现当前的浏览器对ES6的支持并不完善,为了解决这个问题,我们可以使用Babel来将我们编写的ES6代码转换为可运行的ES5代码。 下面是JavaScript中ES6 Babel正确安装过程的完整攻略: 步骤一:安装Node.js 在使用Babel之前,需要先安装Node.js。Node.js是运…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部