首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

精通 MEAN 了解一个 MEAN 应用程序(3)理解目录结构

精通 MEAN 了解一个 MEAN 应用程序(3)理解目录结构

理解目录结构 这个 MEAN 应用程序有四个主要目录,如清单 6 所示。
清单 6.  MEAN                目录结构
1
2
3
4
5
$ ls -ld */
drwxr-xr-x+  7 scott  staff   238 Jun  6 14:06 app/
drwxr-xr-x+  8 scott  staff   272 Jun  6 14:06 config/
drwxr-xr-x+ 49 scott  staff  1666 Jun  6 14:07 node_modules/
drwxr-xr-x+  8 scott  staff   272 Jun  6 14:06 public/




app包含服务器端源代码。config包含配置文件。node_modules包含 package.json 中指定的服务器端模块。public包含客户端源代码 — 包括 lib 目录,其中含有在 bower.json 中指定的客户端库。 您主要应关注 app 和 public 目录。首先从 app 目录中查找应用程序主页的源代码。
研究 MEAN 堆栈的服务器端清单 7 显示了 app 目录结构。
清单 7.  app(服务器端)目录结构               
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ tree app
app
|--- controllers
|�� |--- articles.server.controller.js
|�� |--- core.server.controller.js
|�� |--- users.server.controller.js
|--- models
|�� |--- article.server.model.js
|�� |--- user.server.model.js
|--- routes
|�� |--- articles.server.routes.js
|�� |--- core.server.routes.js
|�� |--- users.server.routes.js
|--- tests
|�� |--- article.server.model.test.js
|�� |--- user.server.model.test.js
|--- views
    |--- 404.server.view.html
    |--- 500.server.view.html

    |--- index.server.view.html
    |--- layout.server.view.html




如果您曾经写过服务器端 MVC 应用程序,那么您应该了解它的典型工作流:
  • 传入的 HTTP 请求将到达某个路由器。
  • 路由器找到合适的控制器来处理该请求。
  • 控制器从数据库构建一个模型(或一个模型列表)并传递给一个视图。
  • 视图将模型与一个模板组合在一起,从而构建 HTML 页面,然后,将完成的输出传递给正在等待的 HTTP 响应。
如清单 8 所示,app/routes/core.server.routes.js 文件(Express 框架的一部分)包含应用程序的关键进入点。
清单 8. app/routes/core.server.routes.js
1
2
3
4
5
6
7
'use strict';

module.exports = function(app) {
  // Root routing
  var core = require('../../app/controllers/core');
  app.route('/').get(core.index);
};




Strict 模式 Strict 模式是 ECMAScript 5 规范的一部分,这也是最新的 JavaScript 主流版本。(有关的更多信息,请参见                    Mozilla Developer Network 上的文章“ ”)。Strict 模式可以向后兼容。不能理解 'use strict'                    语句的早期浏览器版本会直接忽略它;所有新的浏览器将慎重处理它。因此,如果您的新版本浏览器中运行的代码启用了 strict                    模式,那么它也能在旧版本浏览器中运行。

该路由器定义了一个单一的路径(/),由核心控制器的 index 函数处理。注意,核心控制器是一个                CommonJS 模块,类型为 require。
清单 8 开头的 'use strict'; 语句会将您的 JavaScript 运行时设置为 strict                模式,这要比过去的 JavaScript 运行时的 “什么都可以” 的语法规则更严格。在 strict 模式下,JavaScript                运行时会将诚实的错误(honest mistake)处理为语法错误 — 比如不小心将某个变量声明为                global,或试图使用之前未经定义的变量。Strict 模式搭配使用   可确保在开发阶段而不是生产阶段捕捉到语法错误。(当然,实现无 bug                完美版本的关键在于执行单元测试时实现足够大的代码覆盖范围)。
接下来,将查看清单 9 所示的 app/controllers/core.server.controller.js(Express 框架的一部分)。
清单 9. app/controllers/core.server.controller.js
1
2
3
4
5
6
7
8
9
10
'use strict';

/**
* Module dependencies.
*/
exports.index = function(req, res) {
  res.render('index', {
    user: req.user || null
  });
};




index 函数接受传入的 HTTP 请求和传出的 HTTP                响应。由于该请求不需要从数据库获取内容,因此没有对任何模型进行实例化。index 模板被呈现给响应,同时还有一个变量的                JSON 块,它将取代模板中同名的占位符。
清单 10 显示了 app/views/index.server.view.html。
清单 10. app/views/index.server.view.html
1
2
3
4
5
{% extends 'layout.server.view.html' %}

{% block content %}
  <section data-ui-view></section>
{% endblock %}




这里没什么太多内容,只有清单 11 所示的到 app/views/layout.server.view.html 的链接。
清单 11. app/views/layout.server.view.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title>{{title}}</title>

  <!-- General META -->
  <meta charset="utf-8">
  <meta http-equiv="Content-type" content="text/html;charset=UTF-8">

  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width,initial-scale=1">

  <!-- Semantic META -->
  <meta name="keywords" content="{{keywords}}">
  <meta name="description" content="{{description}}">




Express 模板引擎您可以对 Express 使用各种  。一个名为   的 CommonJS 模块甚至可以适应非 Express 模块引擎,并使它们能够与                    Express 兼容。本系列文章将继续使用 Swig;您自己可以选择使用其他模板库。

您现在可以看到一些看上去有些类似的 HTML。围绕 title、keywords 和                description 的 {{}} 分隔符将它们标识为                  占位符,这些占位符将被实际值所替代。Swig 是 MEAN.JS Yeoman 生成器安装的模板引擎。
但是,如果回头看   中的 core                控制器,您会发现传递给这个模板的惟一一个值是                user。如果您怀疑其他占位符是配置文件中定义的默认值,那么您的怀疑是正确的。
返回列表