JSON

【译】基于MEAN的全栈开发实例教程3:通过Angular展示数据(2)

字号+ 作者:H5之家 来源:H5之家 2015-11-05 13:01 我要评论( )

在第1行,我们在当前模块引用了Express。当使用require方法时,依赖于目标模块是怎样实现的,require方法可能返回1个方法或者对象。在这个例子中,这个express变量是1个对象。它提供了一个叫做Router的方法,我们在

在第1行,我们在当前模块引用了Express。当使用 require方法时,依赖于目标模块是怎样实现的, require方法可能返回1个方法或者对象。在这个例子中,这个 express变量是1个对象。它提供了一个叫做 Router的方法,我们在第2行就调用了这个方法。用来访问Express中的路由对象。我们用1个路由来定义我们应用中的端点。我们在这些端点中接收请求。每个端点将会被关联到1个路由处理器,处理器负责处理在端点中收到的请求。

现在看下一行中路由配置的示例。

router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); });

我们使用路由中定义的 get方法来定义1个路由和它的处理器。第1个参数是这个端点;在这里,'/'代表网站的根路径或者主页。第2个参数就是路由的处理器。

在Express中,所有的路由处理器都有一个同样的签名。第1个参数是请求对象,第2个参数是响应对象,第3个参数是当前链中的下一个处理器。Express使用的中间件函数采用链式调用的方式。当Express使用中间件时,有时候你可能需要在当前链中调用下一个中间件。你可以通过 next 变量实现。但是当我们在处理路由的时候,我们几乎不需要这个操作,所以这里你可以安全地删除 next 变量。

现在看一下这个函数体。 res 变量代表了响应对象。这个响应对象自带了一些有用的函数。

  • render:用来渲染视图
  • send:用来发送文本内容到客户端
  • json:发送json对象到客户端
  • redirect:重定向客户端到另一个地址
  • 在这里,我们渲染index视图,这个视图在 views>index.jade中已经定义了。

    这就是一个路由的基础结构。我们现在需要为我们的视频创建一个RESTful API。我们将在1个类似/api/videos的端点中展示我们的视频。

    在 routes 目录下创建1个新的路由模块叫做 videos.js ,然后在文件输入以下代码,之后我会对这段代码进行逐行讲解。

    var express = require('express'); var router = express.Router(); var monk = require('monk'); var db = monk('localhost:27017/vidzy'); router.get('/', function(req, res) { var collection = db.get('videos'); collection.find({}, function(err, videos){ if (err) throw err; res.json(videos); }); }); module.exports = router;

    头两行和之前的一样,我们引入了Express然后获取路由对象。

    然后我们引入了Monk,一个用来持久化MongoDB数据的模块。另一个叫做 Mongoose 的模块也可以达到这个效果。但是在本教程中,我更倾向用Monk。

    之前曾经提过, require 方法会根据模块的实现方式来返回一个对象或者方法。当我们引入Monk的时候得到的是一个方法而不是对象。所以 monk 变量是一个我们通过调用来访问数据库的方法。

    var db = monk('localhost:27017/vidzy');

    现在来实现我们路由处理器的逻辑。

    function(req, res) { var collection = db.get('videos'); collection.find({}, function(err, videos){ if (err) throw err; res.json(videos); }); }

    首先我们调用 db 对象的 get 方法,传入集合的名称(video)。它将返回一个集合对象。这个集合对象提供了一个数字和一些方法来操作集合上的文档。

  • inser
  • find
  • findOne
  • update
  • remove
  • 这里我们使用 find 方法来获取集合中的所有视频。这个方法的第1个参数是一个用来过滤的对象。由于我们需要查询所有视频,我们传入一个空对象。第2个参数是一个回调方法,从数据库返回结果之后调用。这个方法遵循Node回调函数的标准协议模式——“错误优先”。在这个模式中,回调函数的第1个参数是一个错误对象,第2个参数才是返回结果。当你开发更多的Node应用的时候,你将发现更多的这种回调模式。

    在这种回调中,我们首先检查 err 对象是否被设置。如果在查询视频文档中没有出现错误, err 的值是null;否则它将被设置。我们抛出 err 来中断程序的执行并且告知用户。如果没有错误,就通过调用res.json 简单地返回一个JSON对象。

    看最后一行

    module.exports = router;

    这一行定义了一个对象返回值,当别的模块引用这个模块时我们将返回这个对象。在这种情况下我们返回路由对象给Express。这个模块的主要功能就是获取路由并注册一些路由配置并返回。

    现在还剩下一个小步骤。虽然写了一个模块来为我们的新API配置路由信息,但是我们并没有调用它。再次打开 app.js 然后靠近顶部查找以下代码:

    var routes = require('./routes/index'); var users = require('./routes/users');

    通过以下代码将我们的路由模块引入到应用程序模块。添加下面这行代码。

    var videos = require('./routes/videos');

    将新模块复制给 videos变量供之后使用。将 app.js 往下滚动一点然后找到下面代码:

    app.use('/', routes); app.use('/users', users);

    添加一行代码:

    app.use('/api/videos', videos);

    这一行代码的作用就是让 videos 模块给任何以 /api/vides开头的路由使用。

    现在来测试一下我们的API。打开浏览器输入地址 :3000/api/videos 。你将看到以下JSON对象

    {%

    我使用了 JSONView Chrome插件来高亮显示JSON对象。

    接下来几步我们将使用Angular来构建前端代码展示这些视频。

    第3步:添加Angular

    在这一步中,你将学习到Angular的基础知识。如果你已经熟悉Angular,可以跳过这些描述,但是请拷贝这些代码到项目中。

    Angular是一个用来构建单页应用(SPA)的非常流行的前端框架。它提供了路由,依赖注入,测试和MVC的结构实现的代码解耦。如果这些听起来太极客了,也不用担心。这一章将带你了解这些特性。

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 把 JSON 转换成基于行的 UNIX 友好格式的工具

      把 JSON 转换成基于行的 UNIX 友好格式的工具

      2016-01-18 16:06

    • 基于jquery的$.get实现返回解析json数据以及jsonp跨域

      基于jquery的$.get实现返回解析json数据以及jsonp跨域

      2016-01-15 11:09

    • 术业有专攻,何必要做全栈工程师(图)

      术业有专攻,何必要做全栈工程师(图)

      2016-01-03 12:22

    • iOS平台基于KVC的JSON与数据对象绑定

      iOS平台基于KVC的JSON与数据对象绑定

      2015-11-22 19:45

    网友点评