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

yizhihongxing

下面我将详细讲解“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日

相关文章

  • package.json依赖环境相关属性详解

    package.json依赖环境相关属性详解 在 Node.js 项目中,package.json 文件是非常重要的配置文件,其中包含了项目依赖的所有模块信息。package.json 文件中包含了一些与环境相关的属性,例如 “engines” 和 “os” 等。以下将详细介绍与环境相关的 package.json 属性。 “engines” 这个属性用于指…

    node js 2023年6月8日
    00
  • Nodejs让异步变成同步的方法

    Node.js 支持以非阻塞(asynchronous)的方式进行 I/O 操作,这是实现高性能应用的关键。但在某些情况下,我们可能需要将异步操作转换成同步操作,例如:在某些函数中需要读取配置文件,而该函数是同步调用的。本篇攻略将分享两种方法,将异步变成同步。 方法一:利用 util.promisify 将回调函数转换成 Promise Node.js 在版…

    node js 2023年6月8日
    00
  • 基于JavaScript编写一个图片转PDF转换器

    下面是基于JavaScript编写一个图片转PDF转换器的完整攻略。 步骤一:安装依赖 首先需要安装两个JavaScript库:pdf-lib和fs。 pdf-lib是用于创建和操作PDF文档的JavaScript库。 fs是用于读取和写入文件的JavaScript库。 可以使用npm在命令行中进行安装: npm install pdf-lib fs 步骤二…

    node js 2023年6月8日
    00
  • node.js实现端口转发

    下面是关于node.js实现端口转发的完整攻略。 什么是端口转发 在计算机网络中,端口是一种特定的标识符,用于标识不同的进程或服务。每个进程或服务都会占用一个特定的端口来进行通信。而端口转发则是将一台计算机的某个端口的流量转发到另一台计算机的某个端口上的技术。 使用node.js实现端口转发的步骤 要使用node.js来实现端口转发,需要进行以下步骤: 1.…

    node js 2023年6月8日
    00
  • 搞懂什么是Node.js原来这么简单

    搞懂什么是Node.js原来这么简单 Node.js是一种运行于服务器端的JavaScript运行时环境,它让开发者可以使用JavaScript语言来进行服务器端的开发。这篇文章将会详细介绍Node.js的相关知识,为初学者提供全面的学习攻略。 1. 了解Node.js的基本概念 Node.js是以Google Chrome浏览器的V8 JavaScript…

    node js 2023年6月7日
    00
  • vue执行配置选项npm run serve的本质图文详解

    详细讲解一下“vue执行配置选项npm run serve的本质图文详解”的攻略。 什么是npm run serve? npm是Node.js的包管理工具,其中run是用来运行脚本的命令。而在Vue.js项目中,我们可以在package.json文件中设置脚本命令,比如: "scripts": { "serve": &…

    node js 2023年6月8日
    00
  • Node.js使用express写接口的具体代码

    下面是关于使用Node.js和express框架编写接口的具体攻略。我们将通过两条示例来演示如何以正确的方式编写和使用这些代码。 准备工作 在开始编写代码之前,您需要确保您已经完成了以下准备工作: 已经安装了Node.js及其包管理器npm 通过npm安装了express框架 您可以通过以下命令来检查是否已安装Node.js和npm: $ node -v $…

    node js 2023年6月8日
    00
  • node.js中的fs.readdirSync方法使用说明

    当我们需要读取文件夹中的所有文件名时,可以使用node.js中fs模块下的readdir和readdirSync方法。本文主要讲解如何使用readdirSync方法来读取文件夹中的所有文件名。 fs.readdirSync方法的语法 readdirSync方法用于同步地读取指定目录下的所有文件名,其语法如下: fs.readdirSync(path[, op…

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