Node.js Express 框架

1.Express 简介

​ Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

​ 使用 Express 可以快速地搭建一个完整功能的网站 (中文网址:https://www.expressjs.com.cn/)。

​ Express 框架核心特性:

  • 可以设置中间件来响应 HTTP 请求。
  • 定义了路由表用于执行不同的 HTTP 请求动作。
  • 可以通过向模板传递参数来动态渲染 HTML 页面。

2.安装Express

​ 通过应用生成器工具 express-generator 可以快速创建一个应用的骨架。

​ 你可以通过 npx (包含在 Node.js 8.2.0 及更高版本中)命令来运行 Express 应用程序生成器。

$ npx express-generator

此时需要新建一个文件夹myapi,Express应用将在该文件目录下创建,然后安装所有依赖包:

$ npm install

在 Windows 命令行中,使用如下命令启动此应用:

$ npm start

服务启动后,可以在浏览器通过 http://localhost:3000 访问,其默认端口为3000。

3.写接口

​ 在Express框架中,所有后端的接口都是在**routes(路由)**文件夹下写的。

express()通过调用Express 模块导出的顶级函数来创建它:、

​ 如果需要单纯的返回一个json对象,就用res.json(),如果需要返回的时候渲染标签,就用res.send()

 var express = require('express');
 var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
  res.send("<h1>你好,express</h1>")  
});

接下来可以写一个查询接口:(访问地址:http://localhost:3000/select)

//查询接口
router.get("/select",(req,res)=>{
  let data = {
    msg:"查询成功",
    data:{
      name:"张三",
      age:18
    }
  }
  res.json(data)
})

以上简单查询接口写成功之后,此时,就可以更专业的将接口和数据库联系起来。

专业查询接口:(访问地址:)

注意:Express并没有内置数据库模块,需要我们下载安装:$ npm install mysql,然后再引入封装好的db.js。

//专业查询
var db = require("../db/db")
router.get("/search",(req,res)=>{
  let sql = `select * from person`;
  db(sql,(err,result)=>{
    if(err){
      throw err;      
    }
    // console.log(666);
    let data = {
      msg:"查询成功",
      code:1,
      data:result
    }
    res.json(data)
  })
})

Express中跨域问题的解决跟原生有所区别,在app.js里面添加如下代码即可:

app.all("*", function (req, res, next) {
  //设置允许跨域的域名,*代表允许任意域名跨域
  res.header("Access-Control-Allow-Origin", "*");
  //允许的header类型
  res.header("Access-Contro1-Allow-Headers", "content-type");
  //跨域允许的请求方式
  res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
  if (req.method.toLowerCase() == 'options ')
    res.send(200);//让options尝试请求快速结束else
  next();
})

4.热启动工具之nodemon

nodemon是一种工具,可以自动检测到目录中的文件更改时通过重新启动应用程序来调试基于node.js的应用程序。

$ npm install -g nodemon   全局安装
$ nodemon index.js   启动

在Express要使用nodemon,只需在其应用文件夹下,输入如下命令:

$ npm install nodemon  安装
$ nodemon 启动

5.express邮件发送验证码

(1).肯定要引入邮件模块,顺手建一个maileConfig.js

// 准备:进入邮箱:设置>账户>POP3/SMTP服务(开启之后记得复制密钥)
 
//maileCinfig.js
const nodemailer = require('nodemailer');
 
//创建一个smtp服务器
const config = {
    host: 'smtp.qq.com',
    port: 465,
    auth: {
        user: '1192719918@qq.com',//开发者邮箱
        pass: 'goauaydaqqewgbbh',//开发者密钥
    }
};
// 创建一个SMTP客户端对象
const transporter = nodemailer.createTransport(config);
 
//发送邮件
module.exports = function (mail){
    transporter.sendMail(mail, function(error, info){
        if(error) {
            return console.log(error);
        }
        console.log('mail sent:', info.response);
    });
};

(2).在index.js中可以写发送邮件的接口,顺手引入maileConfig.js

// 发送邮件的接口
router.get('/email', function (req, res, next) {
  //保存验证码和邮箱,时间
  let student = {};
  let email = req.query.email;
  let code = createSixNum();
  console.log(code);
  let time = new Date().getTime();
  student.initCode = code;
  student.time = time;
  student.email = email;
  student = JSON.stringify(student);
  // 放入缓存中
  localStorage.setItem(email,student)
 
  let sql = `select * from student where email= "${email}"`;
  db(sql, (err, data) => {
    if (data.length) {
      res.send({
        code: 0,
        message: "邮箱已注册"
      })
    } else {
      var mail = {
        // 发件人
        from: '<1192719918@qq.com>',
        // 主题
        subject: '验证码',//邮箱主题
        // 收件人
        to: email,//前台传过来的邮箱
        // 邮件内容,HTML格式
        text: '用' + code + '作为你的验证码'//发送验证码
      };
      maileConfig(mail)
      res.send({
        code: 1,
        msg: "发送成功"
      })
    }
  })
 
 
  // 随机产生六位验证码
  function createSixNum() {
    var Num = "";
    for (var i = 0; i < 6; i++) {
      Num += Math.floor(Math.random() * 10);
    }
    return Num;
  }
});

(3).写一个校验的接口

//验证码校验(注册)
router.post("/jiaoyan", (req, res) => {
  
  let obody = req.body;
  // 获取缓存
  let student = localStorage.getItem(obody.email)
  console.log(student);
  student = JSON.parse(student);
 
  const registerTime = new Date().getTime()
  if (registerTime - student.time >= 5 * 1000 * 60) {
    res.send({
      code: -1,
      msg: '验证码已过期'
    })
  }
 
  // console.log(student);
  // console.log(obody);
  if (student.initCode === obody.code) {
      let sql = `INSERT INTO student (name,email,password) VALUES('${obody.name}','${obody.email}','${obody.password}')`;
      db(sql,(err,data)=>{
 
          res.send({
            code: 1,
            message: "注册成功",
            data:data
          })
      })
      // 注册成功删除缓存
      localStorage.removeItem(obody.email);
      console.log("----------------------");
      console.log(localStorage.getItem(obody.email));
      console.log("----------------------");
 
  }
  else {
    res.send({
      code: 0,
      message: "验证码输入错误"
    }) 
  } 
})

(4).别忘了引入缓存和MySQL模块

const db = require("../db/db");
const maileConfig = require("./maileConfig");
// 引入缓存模块
const LocalStorage = require('node-localstorage').LocalStorage,
localStorage = new LocalStorage('./scratch');

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340