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

 
原文地址:https://www.cnblogs.com/Tanqurey/p/10780381.html