《Node应用程序构建——使用MongoDB和Backbone》一2.2 Express

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

本节书摘来自异步社区《Node应用程序构建——使用MongoDB和Backbone》一书中的第2章,第2.2节,作者【美】Mike Wilson,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.2 Express

Node应用程序构建——使用MongoDB和Backbone
本书中应用程序大量用到Express框架。依赖于Connect HTTP服务器框架,Express提供了视图渲染和一种描述路由的语言。

要安装Express,只要在工作目录中使用npm:npm install express。

例2-1利用Express构建了一个简单且非常实用的服务器。首先,通过调用express库中的express()函数对app变量初始化。require命令指示Node导入express库,并把它分配给一个局部变量,从而将它的功能提供给当前命名空间。


595e7c28af4bb1e6c5ca3ae57557d34ef3b02e33

应用初始化时,定义了3个路由。

/stooges/[name]

期待一个stooge(配角)的名字作为输入。

/stooges/

如果上一个路由提供的名字未找到,给出反馈信息。

/

一个默认的路由,用于访问应用程序的主页。

在第1个路由,Express会比较提供的配角名称是否为“larry”、“curly”或“moe”,并打印信息。在下一个路由中,Express显示一条消息说明没有找到配角名称。第3个路由中,显示默认的“hello world”。

等一下,第1个路由中的next参数是从哪里来的?它又是什么?实际上,next是指一个函数。next命令指示Express尝试处理匹配当前请求的下一个路由。在这个例子中,输入URL/stooges/ 会被第一个路由(/stooges/:name?)处理,而不是被第2个路由(/stooges)处理。由于没有提供名字,switch语句逻辑会跳转到默认情况下,此时next()函数会被调用。下一个路由(/stooges)包含了预期的响应。

:name参数之后的问号表明name是一个可选的输入,即使不提供name,这个路由也将被加载。


ffc0b1b3a782559b6e69e2c1ae2ae44eab2705a2

在switch语句中,使用了一个三元操作符作为缩写的if/else语句:name ? name. toLowerCase() : ''。这相当于一个很长的代码块,检查变量name是否存在,如果存在,返回小写的字符串,否则返回一个空字符串。


5189d0069b2e921cc46235abda5922079269d02b

模板
模板让你将展现信息从程序代码中分离出来,使你的项目文件更易整理,并渲染出复杂结构的网页。虽然本书主要关注用纯JavaScript来创建和显示视图,但有时候你也会想用Express的模板功能来生成网页,或者只是为了更容易在一个网页中引导所有的JavaScript文件。我选择Jade作为引擎,因为它在概念上类似于CSS,能产生清晰、简洁的代码。

要安装Jade模板引擎,在工作目录中使用NPM命令。


13160ce33c1fc365fd9d6a82ba87b19a9545bc99

例2-2在例2-1的基础上增加了Jade模板支持。3个路由都使用了res.send代替直接在屏幕上打印文字。Express被告知以.jade作为后缀的文件来渲染内容:要么用stooges.jade模板来渲染配角名字列表(或没有名字),要么用默认的index.jade来渲染网站的根。


121a45a5f2b143ee7b1767fc8bf75e6992785ac8

另外新增的是包含app.set('views'...)的3行代码。这个命令告诉Express所有视图都存放在命名为“views”的目录下,是相对于代码文件运行(-dirname)的下级目录。

虽然Jade是用来渲染视图的,但你可能已经注意到,代码中并没有提到或实例化Jade。这是因为Express渲染命令会负责加载任何需要的模板模块,在这个例子中是Jade。如果你没有安装Jade,你的应用程序将会在进行页面渲染时停止运行,并抛出调用栈。

例2-3展示了使用Jade的整个页面布局。这是围绕“真正”页面的部分,它们是网站每一个页面上的标题信息,开放的标签和元数据。body标签将包含单个视图渲染的布局,Express渲染模板时将会包含这个布局。

例2-3 Jade布局(layout.jade)
!!! 5


814bc271b27e917aaa0886292e18f2c8e01b8290

第一行“!!! 5”表明文档类型是HTML5。也可以写成doctype html,但谁高兴打那么多字?

例2-4中包含的模板应该保存在views/index.jade中。它包含网站根内容:没什么消息比一个“hello world”更简单。这个模板的第一行扩展了例2-3中创建的layout.jade模板,这将导致用户的网络浏览器渲染布局的内容。因为h1标签嵌套在模板的block content元素中,Jade知道它应该在布局中的block content被定义后再被渲染。

例2-4 Jade风格的索引主页(index.jade)


519d650e56d3a1a0825d736c961f5f7fb4fe0a42

你可能会注意到,例2-3的布局还包含一个block元素称为scripts,它没有被index模板使用。这个脚本块在网页浏览器中显示为空白。可以在你的模板中添加或删除任何block内容,为页面布局留下极大的灵活性。

例2-5在Jade模板中引入了条件逻辑。如果一个stooge变量被传递到模板,它将显示出这个配角的名字,否则它将显示一般的“没有找到”消息。

例2-5 Jade风格的新stooges页面(stooges.jade)


73d18005371f22bd39cecd2e00a4c748d96196c0
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
10天前
|
开发框架 JavaScript 中间件
node+express搭建服务器环境
node+express搭建服务器环境
node+express搭建服务器环境
|
2月前
|
Web App开发 JavaScript NoSQL
深入浅出:构建基于Node.js的RESTful API
在当今快速发展的互联网时代,RESTful API已成为前后端分离架构中不可或缺的一部分。本文旨在为初学者和中级开发人员提供一个清晰、简洁的指南,详细介绍如何使用Node.js构建一个高效、可维护的RESTful API。通过结合实际案例,本文将从API设计理念出发,深入讲解如何利用Express框架及MongoDB数据库实现API的增删改查功能,同时探讨如何通过JWT进行安全认证,确保数据传输的安全性。此外,文章还将简要介绍如何使用Swagger生成API文档,使得API的测试和维护更加便捷。无论你是希望提升现有项目的API设计,还是想从零开始构建一个新项目,本文都将为你提供一条清晰的道路
|
6天前
|
开发框架 JavaScript 前端开发
【Node系列】Express 框架
Express.js 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,提供一系列强大的特性来帮助你创建各种 web 和移动设备应用。
23 2
|
1月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express构建RESTful API
使用Node.js和Express构建RESTful API
16 0
|
2月前
|
Web App开发 JavaScript 前端开发
构建现代Web应用:Vue.js与Node.js的完美结合
在当今快速发展的Web技术领域,选择合适的技术栈对于开发高效、响应迅速的现代Web应用至关重要。本文深入探讨了Vue.js和Node.js结合使用的优势,以及如何利用这两种技术构建一个完整的前后端分离的Web应用。不同于传统的摘要,我们将通过一个实际的项目示例,展示从搭建项目架构到实现具体功能的整个过程,着重介绍了Vue.js在构建用户友好的界面方面的能力,以及Node.js在处理服务器端逻辑和数据库交互中的高效性。通过本文,读者不仅能够理解Vue.js与Node.js各自的特点,还能学习到如何将这两种技术融合应用,以提升Web应用的开发效率和用户体验。
|
2月前
|
NoSQL JavaScript 前端开发
深入浅出:使用Node.js和MongoDB构建RESTful API
在当今的软件开发领域,构建高效、可扩展的Web服务已成为开发者的重要任务之一。本文将引导读者通过现代JavaScript环境——Node.js,搭配流行的NoSQL数据库MongoDB,一步步构建一个RESTful API。不同于常规的摘要,我们将采用故事化的方式,通过一个虚构的应用“BookFinder”的开发旅程,带领读者理解API设计、数据库交互及安全性考量等关键知识点。无论你是前端工程师希望深化后端知识,还是后端新手寻求实践机会,本文都将提供你所需的指南和启示。
|
2月前
|
开发框架 JavaScript 前端开发
比较两个突出的node.js框架:koa和express
接上文讲述了 koa框架,这边文章比较一下这两个突出的node.js框架:koa和express
|
3月前
|
JavaScript 前端开发 数据安全/隐私保护
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
NodeJS 下构建 命令行工具(CLI) 与 交互式命令界面 的实践
214 1
|
2月前
|
JSON JavaScript 前端开发
JS服务端技术—Node.js知识点
本篇文章是我开始系统学习Node.js的一些笔记。如果文中阐述不全或不对的,多多交流。
62 0
JS服务端技术—Node.js知识点