Node.js利用Express实现用户注册登陆功能(推荐)

对于“Node.js利用Express实现用户注册登陆功能(推荐)”这个主题,我有如下的详细讲解和完整攻略。

1. 准备工作

在开始进行用户注册登陆功能的实现前,需要确保已经安装好了Node.js和Express框架。

2. 创建项目目录和文件

在命令行中,使用如下命令创建项目目录:

mkdir node-login

进入该目录,使用如下命令创建项目文件:

touch app.js routes/index.js routes/user.js views/index.ejs views/login.ejs views/register.ejs

其中,app.js是项目的入口文件,index.js和user.js是路由文件,index.ejs、login.ejs和register.ejs是视图模板文件。

3. 设置依赖

在项目目录下,使用如下命令设置所需的依赖:

npm install express body-parser cookie-parser express-session mongoose connect-mongo --save

这里进行了如下设置:

  • express:Express框架;
  • body-parser:解析POST请求的中间件;
  • cookie-parser:解析Cookie的中间件;
  • express-session:会话管理中间件;
  • mongoose:MongoDB的ODM框架;
  • connect-mongo:将会话存储在MongoDB中的模块。

4. 编写代码

接下来,我们需要进行代码的编写。

首先来看一下app.js的代码:

var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var mongoose = require('mongoose');
var MongoStore = require('connect-mongo')(session);

var app = express();

mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/node-login');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({
    secret: 'node-login',
    resave: true,
    saveUninitialized: false,
    cookie: {
        maxAge: 60000
    },
    store: new MongoStore({
        mongooseConnection: mongoose.connection
    })
}));

app.use('/', require('./routes/index'));
app.use('/user', require('./routes/user'));

app.listen(3000, function() {
    console.log('Server running at http://localhost:3000/');
});

这里首先引入了所需的依赖,然后设置了MongoDB连接,接着使用了body-parser、cookie-parser和session中间件,并将session存储在MongoDB中,最后设置了路由和监听端口。

然后是index.js的代码:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
    res.render('index', {
        title: 'Node.js Login Tutorial'
    });
});

module.exports = router;

这里设置了根路由,并渲染了index视图模板文件。

接下来是user.js的代码:

var express = require('express');
var router = express.Router();
var UserModel = require('../models/user');

router.get('/register', function(req, res, next) {
    res.render('register', {
        title: 'Register'
    });
});

router.post('/register', function(req, res, next) {
    var user = new UserModel({
        username: req.body.username,
        password: req.body.password
    });
    user.save(function(err, user) {
        if(err) {
            return next(err);
        }
        req.session.user = user._id;
        res.redirect('/user/profile');
    });
});

router.get('/login', function(req, res, next) {
    res.render('login', {
        title: 'Login'
    });
});

router.post('/login', function(req, res, next) {
    UserModel.findOne({ username: req.body.username }, function(err, user) {
        if(err) {
            return next(err);
        }
        if(!user || user.password !== req.body.password) {
            return res.redirect('/user/login');
        }
        req.session.user = user._id;
        res.redirect('/user/profile');
    });
});

router.get('/profile', function(req, res, next) {
    if(!req.session.user) {
        return res.redirect('/user/login');
    }
    UserModel.findById(req.session.user, function(err, user) {
        if(err) {
            return next(err);
        }
        if(!user) {
            return res.redirect('/user/login');
        }
        res.render('profile', {
            title: 'Profile',
            user: user
        });
    });
});

router.get('/logout', function(req, res, next) {
    req.session.destroy();
    res.redirect('/');
});

module.exports = router;

这里设置了/register、/login、/profile和/logout四个路由,分别用于用户注册、用户登陆、用户资料页面和用户退出登录。其中,使用了UserModel模型来进行用户的存储和查询。

最后是视图模板文件。以login.ejs为例:

<!DOCTYPE html>
<html>
    <head>
        <title><%= title %></title>
    </head>
    <body>
        <h1><%= title %></h1>
        <% if (message) { %>
            <p><%= message %></p>
        <% } %>
        <form method="post" action="/user/login">
            <p>
                <label>Username:</label>
                <input type="text" name="username" required>
            </p>
            <p>
                <label>Password:</label>
                <input type="password" name="password" required>
            </p>
            <p>
                <button type="submit">Login</button>
            </p>
        </form>
    </body>
</html>

这里使用了EJS模板引擎,设置了用户名、密码的输入框和登陆按钮。

5. 运行项目

最后,使用如下命令运行项目:

node app.js

然后在浏览器中访问http://localhost:3000/,即可看到项目的主页。在该主页中,可以选择注册或者登陆。如果成功登陆,可以看到用户的资料页面。在该页面中,可以选择退出登陆。

以上是利用Express实现用户注册登陆功能的完整攻略。如果需要,还可以添加验证码、邮箱激活等其他功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js利用Express实现用户注册登陆功能(推荐) - Python技术站

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

相关文章

  • 12个Visual Studio调试效率技巧(小结)

    12个Visual Studio调试效率技巧(小结) Visual Studio是开发人员常用的IDE之一,它提供了丰富的功能和工具来帮助我们更快、更准确地开发和调试代码。在这篇文章中,我向大家分享了12个Visual Studio调试效率技巧,让我们在调试代码时更加高效。 技巧1:使用断点条件 有时候,我们只想在特定情况下停止代码的执行,这时我们可以使用断…

    C# 2023年6月3日
    00
  • C# Request.Form用法案例详解

    C# Request.Form用法案例详解 简介 Request对象是ASP.NET Web应用程序中的内置对象,用于在Web服务器上处理HTTP请求。其中,Request.Form是一个集合,用于获取HTTP POST的表单值。Request.Form的用法非常简单,可以通过指定表单控件的名称来获取该表单控件的值。 使用方法 //获取提交表单值 strin…

    C# 2023年6月1日
    00
  • C#实现简单的RSA非对称加密算法示例

    下面是关于C#实现简单的RSA非对称加密算法的攻略: 什么是RSA加密算法? RSA加密算法采用了一种被称为”公钥加密算法”的加密方式,加密和解密使用不同的密钥。公钥可以公开,任何人都可以获得,私钥则只有一个人可以拥有。采用这种方式,可以保证信息传输的安全性。 在C#中实现RSA加密算法 C#提供了RSACryptoServiceProvider类,可以用来…

    C# 2023年6月6日
    00
  • C#中函数的创建和闭包的理解

    C#中函数的创建和闭包的理解 函数创建 声明函数 在C#中使用function关键字来声明一个函数,语法格式为: visibility return_type function_name(parameter_list) { // function body } visibility:可见性修饰符,指定函数的访问范围,可以是public、private、pro…

    C# 2023年5月14日
    00
  • PowerShell中使用.NET将程序集加入全局程序集缓存

    在PowerShell中使用.NET将程序集加入全局程序集缓存,首先需要使用Add-Type -AssemblyName命令加载程序集,然后使用[System.Reflection.Assembly]::Load()方法将加载的程序集添加至全局程序集缓存中。 以下是完整的步骤: 使用Add-Type -AssemblyName命令加载程序集 Add-Type…

    C# 2023年6月3日
    00
  • 让Visual Studio用上chatgpt

        最近小编思维发散“Visual Studio可以集成chatgpt吗?”,这样不就可以让chatgpt帮你写代码了吗?寻觅了一圈,还真有这个东西,那就是一个Visual Studio的扩展插件:Visual chatGPT Studio,虽然不是官方的,部分功能也可以值得一用。本文将介绍Visual chatGPT Studio及它的使用案例。 一、…

    C# 2023年5月4日
    00
  • 详解从零开始—用C#制作扫雷游戏

    详解从零开始—用C#制作扫雷游戏攻略 设计概述 在开始制作扫雷游戏之前,我们先来了解一下扫雷游戏的设计概述。 扫雷游戏主要由以下几个部分组成: 游戏界面:游戏界面包括扫雷游戏的棋盘、雷区、计时器、雷数显示等。 游戏规则:扫雷游戏的规则包括鼠标操作、雷的位置随机分布以及游戏结束判断等内容。 数据存储:扫雷游戏需要实现对游戏记录的存储与读取等功能。 下面我们…

    C# 2023年6月3日
    00
  • 浅析C# 9.0 新特性之 Lambda 弃元参数

    理解你的要求,下面是一份“浅析C# 9.0 新特性之 Lambda 弃元参数”的完整攻略。 Lambda 表达式介绍 Lambda 表达式是一种匿名方法的语法糖,可以快速方便地创建委托和函数式编程风格的代码。 Lambda 表达式可以用于以下几种场景: 作为参数传递给委托; 作为方法返回值返回; 作为 LINQ 查询的查询体部分。 Lambda 表达式的一般…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部