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日

相关文章

  • ASP.NET编译执行常见错误及解决方法汇总

    ASP.NET编译执行常见错误及解决方法汇总 如果你正在使用ASP.NET进行开发,那么你可能会遇到一些常见的编译和执行错误。在这篇文章中,我们将讨论一些最常见的问题,并提供解决方法。 错误信息:“Could not load file or assembly ‘xxxx’ or one of its dependencies. The system can…

    C# 2023年5月14日
    00
  • c# 网络编程之tcp

    C# 网络编程之TCP TCP是传输控制协议,是一种无连接的、可靠的、基于字节流的传输协议,它能够在网络上确保数据的可靠传输。在C#/.NET中,我们可以使用System.Net.Sockets命名空间下的TcpClient和TcpListener类来实现TCP网络编程。 TCP客户端 连接服务器 要建立一个TCP连接,需要指定服务器的IP地址和端口号,并使…

    C# 2023年5月31日
    00
  • C# 汉字转拼音实例(支持GB2312字符集中所有汉字)

    下面我来详细讲解“C# 汉字转拼音实例(支持GB2312字符集中所有汉字)”的完整攻略。 1. 需求分析 我们需要实现一个汉字转拼音的功能,它需要支持GB2312字符集中所有汉字,那么首先我们需要找到一个支持GB2312字符集的汉字库,这个库需要包含每个汉字的拼音以及其他相关信息。 2. 实现方案 我们可以使用第三方库 Pinyin4net 来实现汉字转拼音…

    C# 2023年6月7日
    00
  • C#字符串常见操作总结详解

    C#字符串常见操作总结详解 本文将为您详细介绍C#中关于字符串的常见操作,包括字符串的创建、比较、连接、替换、分割、转换等操作。 字符串的创建 在C#中,字符串可以通过以下方式创建: 字符串字面量 csharpstring str1 = “hello, world”; 使用关键字new创建字符串对象 csharpstring str2 = new strin…

    C# 2023年5月15日
    00
  • c#用Treeview实现FolderBrowerDialog 和动态获取系统图标(运用了Win32 dll类库)

    下面是详细讲解“c#用Treeview实现FolderBrowerDialog 和动态获取系统图标”的攻略。 一、实现FolderBrowerDialog 实现FolderBrowerDialog有很多种方式,这里我们介绍一种使用TreeView控件来实现。TreeView可以创建一个类似于Windows资源管理器的层次结构,同时可以响应点击事件。我们可以利…

    C# 2023年6月7日
    00
  • C#3.0使用EventLog类写Windows事件日志的方法

    关于如何使用 C#3.0 的 EventLog 类写 Windows 事件日志,我们可以按照以下步骤进行: 1. 引用 System.Diagnostics 命名空间 在 C#3.0 中,我们需要使用 System.Diagnostics 命名空间提供的 EventLog 类来访问 Windows 事件日志。因此,在代码文件的头部,需要使用 using 指令…

    C# 2023年5月15日
    00
  • C# String.ToLower()方法: 将字符串转换为小写

    String.ToLower() 是 C# 的字符串方法,其作用是将一个字符串对象的所有字母字符转换成小写形式。 使用方法: string str = "EXAMPLE"; string lowerStr = str.ToLower(); 在上面的代码中,ToLower() 方法将字符串 str 转换成小写形式并存储到 lowerStr …

    C# 2023年4月19日
    00
  • asp.net中获取客户端IP地址网卡信息等方法的代码

    在ASP.NET中,一般可以通过以下两种方式获取客户端的IP地址。 方法一:通过HttpContext.Current.Request.ServerVariables获取客户端IP地址 string ipAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_F…

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