• node用express写后端restful接口实战四:查询数据库,第一个路由请求、.then读取数据库、asnyc/await读取数据库、查询的数据排序


    这节课,就要正式来做第一个接口了。现在数据库中有了内容,这节的内容,也正是要将这些内容查询出来,并以 json 格式输出。

    一、路由

    首先要做的是添加一个新的路由文件。在 Express 中的路由文件,同时包含了其他 MVC 框架中路由控制器两个功能。

    routes 中,添加一个叫做 articles.js 的文件。基础的代码,和项目自带的其他路由文件一样,直接复制过来。

    var express = require('express');
    var router = express.Router();
    
    // ....
    
    module.exports = router;
    

    二、第一个请求

    中间部分,来写一个 get 请求。直接响应一个死的 json 格式

    router.get('/', function (req, res, next) {
        res.json({hello: "ITFun"});
    });
    

    接着还要到 app.js 中使用路由,这样 articles.js 这个路由文件才会生效。

    var articlesRouter = require('./routes/articles');
    
    // ...
    
    app.use('/articles', articlesRouter);
    

    意思就是说,当访问 /articles 这个路径时,会让 articles 这个路由文件生效。

    express 路由定义

    现在就来访问一下吧 http://localhost:3000/articles,果然可以看到输出的内容了。

    三、读取数据库,普通写法

    但是现在输出的内容,并不是数据库里面保存的数据。如果要读取数据库,模型就要正式登场了。

    要使用模型,首先要去引用一下模型文件。然后将中间部分代码,改为

    // ...
    var models = require('../models');
    
    router.get('/', function (req, res, next) {
        models.Article.findAll().then(articles => {
            res.json({articles: articles});
        })
    });
    

    这里指定了模型中,要找的模型是 Article 。每一个模型,都对应数据库中的一张表。你可以简单的理解,现在咱们就是把 articles 这张表找到了。

    接着要做的是,把 articles 表中的所有数据查询出来。这里使用的方法就是 findAll()。回调里的 articles 就是查询到的数据。最后通过 res.json 方法,将 articles 响应出去。

    express 读取接口

    这样一个非常基础的接口就完成。

    四、使用 async/await查询数据库,简化查寻语法

    Sequelize 普遍使用 Promise 的这种写法。如果你之前一直在使用其他语言开发后端,可能会觉得这种写法比较奇怪。 为什么不能直接这样写呢?

    //错误写法
    var articles =  models.Article.findAll();
    res.json({articles: articles});
    

    真这样写了后,刷新页面,得到的结果是:什么也没查出来

    await 示例

    这是因为查询后,你得到的是 Promise 对象,根本就不是数据库中的数据。如果你非常不习惯 Promise 这种 then 的写法,也有更好的方法。将代码改为

    推荐查询语法,异步查询

    router.get('/', async function (req, res, next) {
        var articles = await models.Article.findAll();
        res.json({articles: articles});
    });
    

    加上了,asyncawait 后,再来刷新页面。数据可以正常被查询到了。async/awaitES 7 中的语法。

    • async异步 的意思,async function 表明当前这个 function 是异步的。
    • await,表示等待一个异步方法执行完成。await 只能在 async 函数内部使用,用在普通函数里就会报错。

    使用 async/await 最大的好处就是代码变得干净简洁,可以将原来的 异步js 代码,改为类似于其他语言同步的写法。避免代码中出现一大堆的嵌套回调函数,导致代码难以阅读。

    五、排序

    如果还想要查询的内容,按照一定规则排序。例如按照 id 倒序,也就是后发布的在最上面,先发布的在最下面。可以加上排序参数

    var articles = await models.Article.findAll({
        order: [['id', 'DESC']],
    });
    

    倒序

    如果如果是想要正序,那就把 DESC 改为 ASC。但这里改为 ASC 并没有什么意义,因为数据库查询默认的排序,就是按照 id 正序。所以咱们还是改回来,使用 DESC 倒序查询。

  • 相关阅读:
    软工实践寒假作业(1/2)
    软工总结
    软件工程第一次结对作业
    软工实践第一次个人编程作业
    软工实践第一次作业
    2019年北航OO第四单元(UML任务)及学期总结
    2019年北航OO第三单元(JML规格任务)总结
    用Maven+IDEA+Eclipse组合获得最好的OpenJML体验
    2019年北航OO第二单元(多线程电梯任务)总结
    2019年北航OO第一单元(表达式求导任务)总结
  • 原文地址:https://www.cnblogs.com/chenxi188/p/13840888.html
Copyright © 2020-2023  润新知