• node05


    1、ejs:

    const ejs = require('ejs')
    
    ejs.renderFile('./template/a.ejs', {name:'cc'}, function (err, data) {
        console.log(data)
    })
    //第二个参数是数据
    
    <!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>
    </head>
    
    <body>
        <%= name%>
    </body>
    
    </html>

    输出变量的语法

    <%= variable %>

    <%= obj.a%>

    <%= 1+4%>

    循环语法:

    <!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>
    </head>
    
    <body>
        <% for(let i=0;i<15;i++) {%>
        <div>这是第<%= i%>个</div>
        <% }%>
    </body>
    
    </html>

    输出html:

    使用-

    <!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>
    </head>
    
    <body>
        <% var str="<div>你好呀</div>"%>
        <%- str%>
    </body>
    
    </html>

    ejs编译后输出undefined表示编译发生错误

    ejs引用语法;

    const ejs = require('ejs')
    
    ejs.renderFile('./template/a.ejs', {name:'cc'}, function (err, data) {
        console.log(data)
    })
    //第二个参数是数据

    分支语法

    <!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>
    </head>
    
    <body>
        <% let a=8%>
        <% if(a>0){%>
            <h1>a>0</h1>
        <%else{%>
            <h1>a<=0</h1>
        <%}%>
        
    </body>
    
    </html>

    include 不能接变量,请直接接路径

    2、express结合模板引擎使用

    1)实现服务器

    //一个简单的服务器
    const express = require('express')
    const static = require("express-static")
    const cp = require('cookie-parser')
    const cs = require('cookie-session')
    const bp = require('body-parser')
    const ejs = require('ejs')

    //构建服务器
    let server = express()

    //服务器监听
    server.listen(8080, function () {
    console.log('server is running')
    })

    //解析cookie
    server.use(cp('abc321'))//秘钥

    //使用session
    let keys = []
    for (let i = 0; i < 1000; i++) {
    keys.push('keys_' + Math.random())//生成秘钥
    }
    server.use(cs({
    name: 'sess',
    keys:keys,
    maxAge: 30 * 3600 * 1000
    }))

    //处理post数据
    server.use(bp.urlencoded({ extended: false }))//不使用扩展模式

    //用户请求
    server.use('/', function (req, res, next) {
    //打印get,post
    console.log(req.query,req.body,req.cookies,req.session)

    })


    //处理静态请求
    server.use(static('./www'))

    2、服务器处理post请求中的文件上传

    bodyparser并不完全适用于处理post请求,因为它只能处理数据而不能处理文件

    普通的post表单不能上传文件,需指定其enctype属性

    input表单enctype属性,有3个值

    "application/x-www-form-urlencoded" 即 键值对
    “multipart/form-data”上传表单数据
    “text/plain” 上传纯文本
     
    这时我们改用multer中间件
     
    path模块的parse方法:
    const path =require('path')
    let obj=path.parse(str)
    //.base 文件名,包含扩展名
    //.ext 扩展名
    //.dir 文件所在目录
    //.name:文件名部分,不包括扩展名
    const express = require('express')
    const mr = require('multer')
    const fs = require('fs')
    const path = require('path')//帮助解析文件路径
    
    let server = express()
    
    let multer = mr({ dest: './www/upload' })//声明一个multer对象
    //dest指定文件上传后保存的位置,自动为您编辑文件名
    
    server.use(multer.any()) //single方法接收指定名称的文件
    //.any()接收任意文件
    
    
    server.post('/', function (req, res) {
        console.log(req.files)//files数组存储用户上传的文件
        //为用户上传的文件添加相同的扩展名
        //用到了方法:fs.rename('旧文件完整路径','新文件完整路径')
    
        let newName=req.files[0].path+path.parse(req.files[0].originalname).ext
        fs.rename(req.files[0].path,newName,function(err){
            if(!err) res.send('上传成功')
            else res.send('上传失败')
        })
    })
    server.listen(8080, function () {
        console.log('server is runnning')
    })
    const express = require('express')
    const static = require("express-static")
    const cp = require('cookie-parser')
    const cs = require('cookie-session')
    const bp = require('body-parser')
    const ejs = require('ejs')
    const multer=require('multer')
    
    //构建服务器
    let server = express()
    
    //服务器监听
    server.listen(8080, function () {
        console.log('server is running')
    })
    
    //解析cookie
    server.use(cp('abc321'))//秘钥
    
    //使用session
    let keys = []
    for (let i = 0; i < 1000; i++) {
        keys.push('keys_' + Math.random())//生成秘钥
    }
    server.use(cs({
        name: 'sess',
        keys:keys,
        maxAge: 30 * 3600 * 1000
    }))
    
    //处理post数据
    server.use(bp.urlencoded({ extended: false }))//不使用扩展模式,解析url数据
    server.use(multer({dest:'./www/upload'}).any())
    
    //用户请求
    server.use('/', function (req, res, next) { 
        //打印get,post
        console.log(req.query,req.body,req.files,req.cookies,req.session)
    
    })
    
    
    //处理静态请求
    server.use(static('./www'))

    3、结合模板引擎完成服务器

    1)consolidate

    帮助express整合各种不同的模板引擎

    const express = require('express')
    const static = require("express-static")
    const cp = require('cookie-parser')
    const cs = require('cookie-session')
    const bp = require('body-parser')
    const multer = require('multer')
    const ce = require('consolidate')
    
    //构建服务器
    let server = express()
    
    //服务器监听
    server.listen(8080, function () {
        console.log('server is running')
    })
    
    //解析cookie
    server.use(cp('abc321'))//秘钥
    
    //使用session
    let keys = []
    for (let i = 0; i < 1000; i++) {
        keys.push('keys_' + Math.random())//生成秘钥
    }
    server.use(cs({
        name: 'sess',
        keys: keys,
        maxAge: 30 * 3600 * 1000
    }))
    
    //处理post数据
    server.use(bp.urlencoded({ extended: false }))//不使用扩展模式,解析url数据
    server.use(multer({ dest: './www/upload' }).any())
    
    //配置模板引擎
    server.set('view engine','html')//修改server全局配置,修改视图引擎为html
    //确认模板位置
    server.set('views','./views')
    //确认所使用的模板引擎
    server.engine('html',ce.ejs)
    
    //用户请求
    // server.use('/', function (req, res, next) {
    //     //打印get,post
    //     console.log(req.query, req.body, req.files, req.cookies, req.session)
    
    // })
    
    //接收用户请求
    server.get('/index',function(req,res){
        // if(req.session.userid){
            //指定模板名称
            res.render('a.ejs',{name:'cc'})
        // }else{
        //     res.render('login.ejs',{})
        // }
    })
    
    //处理静态请求
    server.use(static('./www'))
     
    2、路由:
    express自带路由功能
    const express=require('express')
    
    let server=express()
    
    let routerUser=express.Router()//用户模块
    
    server.use('/user',routerUser) //确认路由对应关系
    
    //进行路由分发
    routerUser.get('/a.html',function(req,res){
        res.send('a.html')
    })
    
    routerUser.get('/b.html',function(req,res){
        res.send('b.html')
    })
    
    let routerNews=express.Router()//新闻模块
    
    server.use('/news',routerNews) //确认路由对应关系
    
    routerNews.get('/c.html',function(req,res){
        res.send('c.html')
    })
    
    routerNews.get('/d.html',function(req,res){
        res.send('d.html')
    })
    
    server.listen(8080)

    router相当于迷你版的server

     
  • 相关阅读:
    C# memoryStream
    C# memoryStream
    C# HSSFWorkbook与XSSFWorkbook的区别和.xls和.xlsx的区别
    C# HSSFWorkbook与XSSFWorkbook的区别和.xls和.xlsx的区别
    C# winform 启动外部程序
    C# winform 启动外部程序
    NPOI2.2.0.0实例详解(九)—设置EXCEL单元格【时间格式】
    NPOI2.2.0.0实例详解(九)—设置EXCEL单元格【时间格式】
    FileStream 的FileShare一点小认识
    FileStream 的FileShare一点小认识
  • 原文地址:https://www.cnblogs.com/Tanqurey/p/10780381.html
Copyright © 2020-2023  润新知