Node(七)之express框架,简单的邮箱注册小案例(Get方式)

简介: Node(七)之express框架,简单的邮箱注册小案例(Get方式)

附上代码:

HTML部分(需要用到Jq)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <script src="./jquery.js"></script>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      div:nth-child(2) {
        display: none;
      }
      input {
        display: block;
        height: 40px;
        width: 200px;
        margin: 20px auto;
      }
      button:not(#email) {
        display: block;
        height: 30px;
        width: 70px;
        background: lightcoral;
        border: none;
        margin: 0 auto;
      }
      #email {
        display: block;
        height: 30px;
        width: 100px;
        margin: 0 auto;
      }
      ul {
        height: 50px;
        width: 200px;
        background: lightblue;
        margin: 0 auto;
        list-style: none;
      }
      li {
        height: 50px;
        width: 100px;
        float: left;
        text-align: center;
        line-height: 50px;
      }
      li:hover {
        background: lightgreen;
        cursor: pointer;
      }
    </style>
  </head>
  <body>
    <ul>
      <li id="regChange">注册</li>
      <li id="loginChange">登录</li>
    </ul>
    <div id="reg">
      <input type="text" placeholder="邮箱" id="user" />
      <input type="text" placeholder="密码" id="psd" />
      <input type="text" placeholder="验证码" id="sendmail" />
      <button id="email">发送验证码</button> <button id="btn">注册</button>
    </div>
    <div id="login">
      <input type="text" placeholder="用户名" id="loguser" />
      <input type="text" placeholder="密码" id="logpsd" />
      <button id="logbtn">登录</button>
    </div>
    <script>
        //增加监听事件
      btn.addEventListener("click", clickHandler);
      logbtn.addEventListener("click", clickHandler);
      email.addEventListener("click", sendHandler);
      regChange.addEventListener("click", changeHandler);
      loginChange.addEventListener("click", changeHandler);
      function clickHandler(e) {
        if (this.textContent === "注册") {
            //若为空时跳出
          if (!user.value || !psd.value || !sendmail.value) {
            alert("Can't be empty");
            return;
          }
          //点击注册时将邮箱号,密码,验证码传送至后台
          $.get(
            `http://localhost:1024/index/reg?user=${user.value}&psd=${
              psd.value
            }&mail=${sendmail.value}`,
            function(res) {
                //后台返回的对象,若hasUser为真,说明已有用户名,否则注册成功
              if (res.hasUser) {
                alert("注册失败");
                return;
              } else {
                alert("注册成功~");
              }
              //成功后隐藏注册,显示登录
              reg.style.display = "none";
              login.style.display = "block";
            }
          );
        } else if (this.textContent === "登录") {
            // 同注册,不能为空
          if (!loguser.value || !logpsd.value) {
            alert("Can't be empty");
            return;
          }
          //点击登录时将邮箱号,密码传送至后台
          $.get(
            `http://localhost:1024/index/login?user=${loguser.value}&psd=${
              logpsd.value
            }`,
            function(res) {
                //后台返回的对象,若isUser为真,说明正确,并跳转至欢迎页,否则失败
              if (res.isUser) {
                alert("登录成功");
                location.href = "./welcome.html";
              } else {
                alert("用户名或密码不正确");
                return;
              }
            }
          );
        }
      }
      function sendHandler(e) {
        //   点击获取验证码后将验证码发送到后端进行比对
        $.get(`http://localhost:1024/index/sendmail?${user.value}`);
      }
      function changeHandler(e) {
        //   点击上方的注册登录切换
        if (e.target.textContent === "注册") {
          reg.style.display = "block";
          login.style.display = "none";
        } else {
          reg.style.display = "none";
          login.style.display = "block";
        }
      }
    </script>
  </body>
</html>

node后台部分: 需要引入的第三方模块有:express框架,cors,nodemailer,

const express = require('express');//引入express框架(需要先下载,官网有教程)
const url = require('url');
const path = require('path');
const fs = require('fs');
const cors = require('cors');//引入cors模块(解决跨域问题)
const app = express();
// const bodyparser = require('body-parser');
const sendMail = require('./send');//这个模块是发送邮件模块(在我第三篇node文章里有)
app.use(cors());
// 下面的类似于http请求的头文件(另一篇文章有写到http请求,也是注册登录)
app.all("*", function (req, res, next) {
    //设置允许跨域的域名,*代表允许任意域名跨域
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "content-type");//允许的header类型
    res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");//跨域允许的请求方式 
    next();//是否继续向下执行
})
//注册接口
var count = '';//新建一个空字符存放验证码,可供全局调用
app.get('/index/reg', (req, res) => {
    let search = url.parse(req.url).search;//保存前端传来的数据
    files = path.join(__dirname, './user.txt');//用一个txt来记录用户名和密码
    fs.readFile(files, 'utf8', (err, data) => {
        //读取txt文件,判断是否存在用户名,并对验证码进行判断
        if (data.indexOf(search.split('&')[0]) === -1 && search.split('&')[2].split('=')[1] === count) {
            fs.appendFile(files, search.split('&')[0] + '&' + search.split('&')[1]);//符合条件就将信息存至TXT中,并返回一个对象至前端,表示验证成功(hasUser为真,说明该用户已存在)
            res.send({
                hasUser: false
            });
        } else {
            //不符合条件就返回一个对象至前端,表示验证失败
            res.send({
                hasUser: true
            });
        }
    });
});
//登录接口
app.get('/index/login', (req, res) => {
    let search = url.parse(req.url).search;//保存前端传来的数据
    files = path.join(__dirname, './user.txt');
    //读取txt文件,判断是否存在用户名和对应的密码
    fs.readFile(files, 'utf8', (err, data) => {
        //符合条件就返回一个对象至前端,表示验证失败(isUser为真,说明该用户名与密码不符)
        if (data.indexOf(search) === -1) {
            res.send({
                isUser: false
            });
        } else {
            res.send({
                isUser: true
            });
        }
    });
});
//邮箱验证接口
app.get('/index/sendmail', (req, res) => {
    count = '';//初始化验证码容器
    let Email = url.parse(req.url).query;//获取前端传来的邮箱号
    for (let i = 0; i < 4; i++) {
        count += Math.floor(Math.random() * 10);//生成4个随机数
    }
    sendMail.send(Email, count);//调用邮件发送模块(传入注册的邮箱,验证码)
    res.send(count);
});
//监听服务
app.listen(1024, () => {
    console.log('Server Start~');
});

附上发送邮件的模块(在我前面的文章中也有)

//引入模块
const nodemailer = require("nodemailer");
//新建对象
let obj = {
transporter: nodemailer.createTransport({
service: "qq", // 运营商 qq邮箱 网易//
port: 465,
secure: true,
auth: {
user: "**********@qq.com", //发送方的邮箱
pass: "***************" // pop3 授权码
}
}),
//传参(对方的mail地址,内容)
send: function(mail, content) {
mailOptions = {
//发送方的邮箱地址
from: '"Hello World~" <***********@qq.com>',
to: mail,
subject: content,
text: content,
html: "<h1>" + content + "</h1>"
};
this.transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log("Message sent: %s", info.messageId);
});
}
};
//抛出对象以接收
module.exports = obj;


相关文章
|
8天前
|
开发框架 JavaScript 安全
js开发:请解释什么是Express框架,以及它在项目中的作用。
【4月更文挑战第24天】Express是Node.js的Web开发框架,简化路由管理,支持HTTP请求处理。它包含中间件系统用于日志、错误处理和静态文件服务,集成多种模板引擎如EJS、Jade、Pug。框架还提供安全中间件提升应用安全,并具有良好的可扩展性,便于项目功能扩展和开发效率提升。
29 3
|
8天前
|
JSON JavaScript 前端开发
❤Nodejs 第九章(token身份认证和express-jwt的安装认识)
【4月更文挑战第9天】Node.js第九章介绍了Token身份认证,特别是JWT(JSON Web Token)作为跨域认证的解决方案。JWT由Header、Payload和Signature三部分组成,用于在客户端和服务器间安全传输用户信息。前端收到JWT后存储在localStorage或sessionStorage中,并在请求头中发送。Express-JWT是一个中间件,用于解析JWT。基本用法包括设置secret和algorithms。注意安全问题,避免混合使用不同算法以防止降级攻击。
48 0
|
8天前
|
开发框架 JavaScript 中间件
node+express搭建服务器环境
node+express搭建服务器环境
node+express搭建服务器环境
|
8天前
|
JSON JavaScript 中间件
使用 Node.js 开发一个简单的 web 服务器响应 HTTP get 请求
使用 Node.js 开发一个简单的 web 服务器响应 HTTP get 请求
11 2
|
8天前
|
开发框架 JavaScript 中间件
深入探索Node.js的Express框架:使用与中间件详解
【4月更文挑战第30天】本文深入探讨了Node.js的Express框架,介绍了其作为Web开发的强大工具,主要聚焦于基本使用和中间件。Express是基于Node.js的Web应用框架,用于构建高效的应用和API。文章详细讲解了如何安装Express,创建简单应用,以及中间件的工作原理和应用,包括中间件的顺序、错误处理和挂载位置。此外,还提到了使用第三方中间件扩展功能。理解Express基础和中间件对于开发高质量Web应用至关重要。
|
8天前
初识express框架
初识express框架
|
8天前
|
JavaScript 中间件 API
node.js之express的基础知识
node.js之express的基础知识
|
8天前
|
开发框架 JavaScript 前端开发
【Node系列】Express 框架
Express.js 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,提供一系列强大的特性来帮助你创建各种 web 和移动设备应用。
37 2
|
8天前
|
存储 JavaScript 数据库
nodejs中express框架实现增删改查接口
nodejs中express框架实现增删改查接口
|
8天前
|
开发框架 JSON JavaScript
Node.js教程-express框架
Node.js教程-express框架
42 1