Express文件目录
|
|
启动文件,或者说入口文件
存储着工程的信息及模块依赖,当在 dependencies 中添加依赖的模块时,
运行 npm install ,npm 会检查当前目录下的 package.json,并自动安装所有指定的模块
存放 package.json 中安装的模块,当你在 package.json 添加依赖的模块并安装后,存放在这个文件夹下
存放 image、css、js 等文件
存放路由文件
存放视图文件或者说模板文件
存放可执行文件
app.js
|
|
通过 require() 加载了 express、path 等模块,以及 routes 文件夹下的 index.js 和 user.js 路由文件
生成一个 express 实例 app
设置 views 文件夹为存放视图文件的目录,即存放模板文件的地方,dirname 为全局变量,存储当前正在执行的脚本所在的目录
设置视图模板引擎为 ejs
设置 /public/favicon.ico 为 favicon 图标
加载日志中间件
加载解析 json 的中间件
加载解析 urlencoded 请求体的中间件
加载解析 cookie 的中间件
设置 public 文件夹为存放静态文件的目录
一级路由控制
捕获404错误,并转发到错误处理器
开发环境下的错误处理器,将错误信息渲染 error 模板并显示到浏览器中
生产环境下的错误处理器,将错误信息渲染 error 模板并显示到浏览器中
导出 app 实例供其他模板调用
bin/www
|
|
表明这是一个 node 可执行文件
引入 debug 模块,打印调试日志
引入我们上面导出的 app 实例
设置端口号
创建 HTTP 服务
启动工程并监听 3000 端口
routes/index.js
|
|
这个代码的意思是,先导入 express 模块,然后生成一个路由实例用来捕获访问主页的 GET 请求,导出这个路由并在 app.js 中通过 app.use(‘/‘, routes) 加载。
这样,当访问主页时,就会调用 res.render(‘index’, {title: ‘Express’}) 渲染 views/index.ejs 模板并显示到浏览器中
views/index.ejs
|
|
在渲染模板时,我们传入了一个变量 title 值为 express 字符串,
模板引擎将所有 <%= title %> 替换为 express,然后将渲染后生成的html显示到浏览器中
ejs
ejs 是模板引擎的一种,也是我们这个教程中使用的模板引擎,因为它使用起来十分简单
使用模板引擎
|
|
express -e blog 只是初始化了一个使用 ejs 模板引擎的工程而已,
比如 node_modules 下添加了 ejs 模板,views 文件夹下有 index.ejs
res.render()
在 routes/index.js 中通过调用 res.render() 渲染模板,并将其产生的页面直接返回给客户端。
它接受两个参数,第一个是模板的名称,即 views 目录下的模板文件名,扩展名 .ejs 可选。
第二个参数是传递给模板的数据对象,用于模板翻译
views/index.ejs 中的代码
|
|
当我们 res.render(‘index’, {title: ‘Express’}); 时,
模板引擎会把 <%= title %> 替换成 Express,然后把替换成的页面显示给用户
渲染后生成的页面代码为
|
|
静态文件
|
|
设置了静态文件目录为 public 文件夹,所以上面代码中的 href = ‘/stylesheets/style.css’
就相当于 href = ‘public/stylesheets/style.css’
ejs 的标签系统
|
|
<%= code %> 和 <%- code %> 的区别,当变量 code 为普通字符串时,两者没有区别。
当 code 比如为 <h1> hello </h1>
这种字符串时,<%= code %> 会原样输出 <h1> hello </h1>
,
而 <%- code %> 则会直接显示 H1 大小的 hello 字符串
ejs 的官网实例
The Data
The Template
The Result
页面布局
index.ejs
a.ejs
b.ejs
最终 index.ejs 会显示