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');