常用模块和模板引擎

一、常用模块
  1. 加密
//下载:
npm i bcryptjs -S
//导入模块
var bcrypt = require('bcryptjs');
// 加密
// 数字,将使用指定的轮数生成盐并将其使用。推荐 10
密文 = bcryptjs.hashSync(明文[,数字]); 
// 验证:判断密码是否一致
// 通过返回true,失败返回false
bcryptjs.compareSync(明文,密文); 
  1. 文件上传

项目中免不了要进行文件的上传,例如头像的上传。在nodejs中上传文件需要依赖multer第三方模块

//下载:
npm i multer -S
//导入模块
const multer  = require('multer')
//配置选
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        // file中包含了上传的文件的所有信息
        cb(null, 自定义文件上传后所在的目录)
    },
    filename: function (req, file, cb) {
        //随机文件名称
        let num=Math.floor(Math.random()*(9999999-1000000))+1000000
        //获取图片后缀
        let extname=path.extname(file.originalname)
        //图片文件名称
        let filename=+new Date()+'-'+num+extname
        cb(null, filename)
    }
})
//根据配置项创建中间件
const upload = multer({ storage: storage })
//单个文件上传
app.post('/profile', upload.single('上传表单name值'), (req, res, next) =>{
  // req.file 是上传的文件信息 - 可以从中获取到文件名称、路径、后缀 - 拼接路径存入mongodb
})

//一个表单控件上传多个文件
app.post('/photos/upload', upload.array('photos', 12), (req, res, next)=>{
  // req.files 是 `photos` 文件数组的信息
  // req.body 将具有文本域数据,如果存在的话
})

//多个表单控件上传多个文件
const cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('路径', cpUpload, (req, res, next)=> {
  // file 是一个对象 (String -> Array) 键是文件名,值是文件数组
  // req.body 将具有文本域数据,如果存在的话
})

//如果需要处理一个只有文本域的表单
app.post('路径', upload.none(), (req, res, next)=> {
  // req.body 包含文本域
})
  1. 邮件发送
  • 借助某个邮箱账号,开启能给对应的邮箱服务器发送请求的功能

//下载:
npm install nodemailer --save
//导入模块
const nodemailer = require('nodemailer')

// 1. 创建发送器
const transport = nodemailer.createTransport({
  // 需要你发送放邮箱的 stmp 域名和密码和一些其他信息
  // 需要你去复制其中的3个配置, 找到下载的 nodemailer 第三方包
  //  node_modeules -> nodemailer -> lib -> well-known -> services.json
  "host": "smtp.qq.com",
  "port": 465,
  "secure": true,
  // 配置用户信息-验证权限
  auth: {
    // 发送方邮箱的用户名
    user: '邮箱号',
    // stmp 允许密码
    pass: '授权码'
  }
})

// 2. 利用发送器发送邮件
transport.sendMail({
  // 从那个邮箱发送
  from: '发送方邮箱',
  // 发送到哪里, 可以写一个字符串, 书写邮箱, 也可以写一个数组, 写好多邮箱
  to: ['接收方邮箱', '接收方邮箱'],
  // 邮件标题
  subject: '标题',
  // 本次邮件的 超文本 内容
  html: `
    您好: 本次的验证码是
    <h1 style="color: red;"> 2345 </h1>
    请在 3 分钟内使用
    <br>
    ------------------------<br>
    前途无限股份有限公司
  `,
  // 本次邮件的 文本 内容
  // text: ''
}, (err, data) => {
  if (err) return console.log(err)
  console.log('邮件发送成功')
  console.log(data)
})
二、模板引擎
  1. 开发模式介绍
  • 传统开发模式

  • 前后端分离开发模式

  1. 模板引擎介绍

所谓模板引擎,其实就是一种单独的文件类型,可以在这个文件中解析后端代码和逻辑代码以及html的展示性代码,即在一个文件中,既可以有后端逻辑代码,又可以有前端页面代码,这种文件就叫做模板。

为了便于维护,且使后端逻辑能够比较好的融入前端的HTML代码中,同时便于维护,很多第三方开发者就开发出了各种Nodejs模板引擎,其中比较常用的就是Jade/Pug、Ejs和art-template 等模板引擎。

目的:使后端逻辑能够比较好的融入前端的HTML代码中,减少渲染次数,同时便于维护

我们选择atr-template,因为它编译速度最快

网址:http://aui.github.io/art-template/zh-cn/

  1. 使用
//下载安装:
npm i -S art-template express-art-template

// 模板引擎配置
// 指定art-template模板,并指定模块后缀为.html
app.engine('html', require('express-art-template'));
// 指定模板视图路径
app.set('views', path.join(__dirname, 'views'));
// 省略指定模块文件后缀后名称(可选,在渲染时可以省略的后缀)
app.set('view engine', 'html')

//使用方式:
//- 使用art-template展示一个视图(html文件)
//- 将视图放入views目录下(允许分目录)
//- 编写代码,展示视图的方式是`res.render(文件的路径)
app.get('/', (req, res) => {
    // 输出视图
    res.render(模板名称)
})

//控制层返回数据(将后端指定的数据传递到视图中)
app.get(uri,(req,res)=>{
    res.render(模板,{
        username: '张三',
        age: 25,
        gender: '女',
        hobby: ['篮球','乒乓球','羽毛球']
    })
})
  1. 模板语法
  • 变量输出:

<!-- 标准语法 -->
{{ username }}

<!-- 原始语法 -->
<%= username %>
//上述方式不能解析html标签,只能原样输出,如果需要解析html标签,则用下述的方法输出:
<!-- 标准语法 -->
{{@ username}}

<!-- 原始语法 -->
<%- username %>
  • 条件判断

{{if 条件}} … {{else if 条件}} … {{/if}}
<%if (条件){%> … <%}else if (条件){%> … <%}%>
  • 循环

<!-- 支持 数组和对象的迭代  默认元素变量为$value 下标为$index  
     可以自定义 {{each target val key}} -->
{{each 循环的数据}}
    {{$index}} {{$value}}
    //如果使用默认的键、值的名字(index,value)则其前面的$一定要写
{{/each}}

{{each 循环的数据 val key}}
    //如果使用的自定义的键、值的名字,则前面的$一定不能写
    {{key}} {{val}}
{{/each}}

<% for(var i = 0; i < target.length; i++){ %>
    <%= i %> <%= target[i] %>
<% } %>
  • 模板导入

{{include '被引入文件路径'}}
<% include('被引入文件路径') %>
  • 模板继承

//被继承的模板
<html>
<head>
    <meta charset="utf-8">
    <!-- 类似于vue的插槽 -->
    <title>{{block 'title'}}My Site{{/block}}</title>
</head>
<body>
    <!-- block占位符 content此占位的名称 -->
    {{block 'content'}}{{/block}}
</body>
</html>

//需要继承的子模板
<!--extend 继承 -->
{{extend './layout.html'}}
{{block 'title'}}首页{{/block}}
{{block 'content'}}
    <p>This is just an awesome page.</p>
{{/block}}
  1. json-server

有时候我们做一些较小的项目,数据量较小。为了提高开发效率,无需专门写接口,利用一个json文件存储数据,此时可以使用json-server工具,快速的启动一个用于提供数据增删改查的服务器。

//下载安装
npm i json-server -g
//使用:
json-server .json文件路径
//可以使用postman或postwomen进行增删改查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值