一、渲染
一. 服务器渲染
特性:把服务端的数据和页面结合完毕之后,给客户端返回整个页面(没有ajax)
服务器渲染使用引擎模板art-template或者ejs。
1.art-template模板
1.引入安装好的art-template
const artTemplate=require('art-template')
2.把数据和模板结合
//2 数据与模板结合,两个参数分别为页面绝对路径和数据对象
const html=artTemplate(path.join(__dirname,'./views7/index.html'),bfy)
3.返回处理好的页面
res.send(html)
如需在页面中使用arttemplate的对象数据,使用两种方法:
1 标准语法(插值表达式{{name}}
)
2 原始语法(<%=name%>
)
2.ejs模板(官方用法)
- 安装
cnpm install ejs -S
- 设置ejs模板的类型和位置(在
请求之前设置
)
app.set('engine view','ejs')//设置模板类型
app.set('views',path.join(__dirname,'./views7'))//设置模板位置
- render渲染
app.get('/home',(req,res)=>{
const bfy={
name:'bfy',
age:18
}
//4 render渲染页面
res.render('home.ejs',bfy)//两个参数,页面和数据
})
需注意的是这里的view里面的html页面渲染数据是不可以用标准语法,只能用原始语法
二. 客户端渲染
特性:通过ajax请求后台接口,把数据和某个代码片段结合,然后拼接到页面中。(局部 异步 刷新
)
二、后端路由模块
后端路由 实际就是前端请求的url与后端对该url处理函数的对应关系
例如、
app.get('/index.html',(req,res)=>{
const bfy={
name:'bfy',
age:18
}
//2 数据与模板结合,两个参数分别为页面绝对路径和数据对象
const html=artTemplate(path.join(__dirname,'./views7/index.html'),bfy)
res.send(html)
})
这就是一个路由,/index.html为请求url,后面回调函数即为后端处理函数,
可以将所有的这种函数(路由)模块化
为router.js文件,具体步骤为:
- 所有的路由函数写入router.js,引入express和需要的包并且实例化对象:
const router=express.Router()
- 挂载关键字app换为router
router.get(...)
- 暴露
module.exports = router
- app.js中引入注册router模块即可(相当于引入中间件):
const router= require('./router') app.use(router)
三、express生成器
- 安装:
cnpm insatall express-generator -g
- 初始化项目(在根目录下):终端中
express 项目名
即可,非常便捷 - cnpm install 安装node_modules依赖包
- cnpm start启动项目,注意这里
不能nodemon app.js运行因为app.js文件中没有监听端口
四、接口文档
接口文档包含api,返回数据类型,请求方式,参数等,书写很繁琐,modejs中科一使用apidoc自动生成:
- 安装apidoc:
cnpm install apidoc -g
- 在项目的根目录新建一个apidoc.json文件,写入官方文档里的格式代码:
{
"name": "example",//文档名
"version": "0.1.0",//版本号
"description": "apiDoc basic example",//描述
"title": "Custom apiDoc browser title",//文档网页标题
"url" : "https://api.github.com/v1"//文档地址
}
- 在需要生成接口文档的接口上面注解
/**
* @api {get} /user/:id 根据id获取用户信息
* @apiName GetUser 此名不能重复
* @apiGroup User api组(路由组)
*
* @apiParam {Number} id 用户id
*
* @apiSuccess {String} firstname Firstname of the User. 返回的模板,可自己定义
* @apiSuccess {String} lastname Lastname of the User.
*/
- 终端运行命令生成文档
apidoc -i myapp/ -o apidoc/ -t mytemplate/
其中-i是以哪个文件夹生成,-o时生成到哪个文件,