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)实现服务器
//一个简单的服务器
2、服务器处理post请求中的文件上传
bodyparser并不完全适用于处理post请求,因为它只能处理数据而不能处理文件
普通的post表单不能上传文件,需指定其enctype属性
input表单enctype属性,有3个值
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'))

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

node05的更多相关文章
- 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- spark HA 安装配置和使用(spark1.2-cdh5.3)
安装环境如下: 操作系统:CentOs 6.6 Hadoop 版本:CDH-5.3.0 Spark 版本:1.2 集群5个节点 node01~05 node01~03 为worker. node04. ...
- yarn.resourcemanager.ha.id设置
resourcemanager启动报错,其中一个启动成功,另一个启动报8088端口被成功启动的rm占用 2016-11-18 17:08:49,478 INFO org.apache.zookeepe ...
- nodemanager启动失败
yarn启动报错: 2016-11-16 16:12:44,304 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Stopping N ...
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- ansible安装(批量执行命令
rpm安装 下载epl源 : Download the latest epel-release rpm from:http://dl.fedoraproject.org/pub/epel/6/x86 ...
- hive 未初始化元数据库报错
启动hive-metastore和hive-server2 用beeline连接hive报错 [root@node04 hive]# beeline Beeline version 0.13.1-cd ...
- Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 ...
- CentOS 7 配置静态IP后不生效 & Job for network.service failed
参考:http://tieba.baidu.com/p/3233996339#57290767555l 在CentOS中配置静态IP后不生效. 解决办法:将/etc/sysconfig/network ...
随机推荐
- sql注入--双查询报错注入原理探索
目录 双查询报错注入原理探索 part 1 场景复现 part 2 形成原因 part 3 报错原理 part 4 探索小结 双查询报错注入原理探索 上一篇讲了双查询报错查询注入,后又参考了一些博客, ...
- Pytorch划分数据集的方法
之前用过sklearn提供的划分数据集的函数,觉得超级方便.但是在使用TensorFlow和Pytorch的时候一直找不到类似的功能,之前搜索的关键字都是"pytorch split dat ...
- 2018-2019-2 20165231 王杨鸿永 Exp6 信息搜集与漏洞扫描
实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服 ...
- nb-iot简介【转】
转自:http://www.elecfans.com/tags/nb-iot/ 标签 > nb-iot nb-iot 关注 118人关注 提供NB-IoT技术特点,NB-IoT模块/芯片,NB- ...
- JUC--Callable 以及Lock同步锁
/** * 一.创建执行线程的方式三:实现Callable接口.相较于实现Runnable接口方式,方法可以有返回值,并且可以抛出异常 * 二.callable 需要FutureTask实现类的支持. ...
- JUC--闭锁 CountDownLatch
CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,允许一个或者多个线程一直等待. 闭锁可以延迟线程的进度直到其到达终止状态,可以确保某些活动知道其他活动都完成才继续 ...
- 强连通分量Kosaraju
#include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #i ...
- Vue之展示PDF格式的文档
事实上有很多种在前端展示PDF格式文档的方法,小编也用过好多种,例如有<iframe>.<embed>和<object>这些标签,但是在Vue项目里,这些方法都不能 ...
- Linux cpu 内存 压力测试
stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s
- itextsharp html转成pdf 特殊符号异常处理
项目中使用html转成pdf ,遇到包含& 特殊字符就会出错. 比如:<p>&</p>使用该html输出成pdf就会报异常 解决方案:需使用html转义符< ...