• node用express写后端restful接口实战六:数据库的增删改查:根据请求参数查询单篇文章、修改单篇文章、删除单篇文章、


    这一节要来完成查看修改删除三个接口。这三个接口有一定的的相似性,再有了前面课程的基础后,相信咱们能顺利的搞定他们。

    查询

    先来做查看一篇文章的接口,打开数据库看看,所有的记录第一个字段,都是 id,而且这个 id 是自增的,永远不会重复的。如果想查询到一篇文章,最好的方法,就是使用这个唯一的 id 值来找到它。

    数据库中的id

    router.get('/:id', async function (req, res, next) {
        res.json({id: req.params.id});
    });
    

    那么我们定义的路由的时候,就在 / 后面加上一个 :id。这样定义后,表示这里可以接受一个 文章id 参数。打开 Postman,当请求的路径是 http://localhost:3000/articles/4 这种格式的时候,这里的 4,就会对应到路由上的 :id 了。

    接在就是要想办法将这个 id 给取到,使用的方法是用 req.params.id。使用 res.json 输出一下看看。

    获取id

    果然可以看到用户传过来 4 这个 id 了。

    接受到 id 后,在模型中调用 findByPk。 就可以在 Articles 表中找到当前文章,还是输出 json 就好了。

    router.get('/:id', async function (req, res, next) {
        var article = await models.Article.findByPk(req.params.id);
        res.json({article: article});
    });
    

    Tips: findByPk,这里的 PkPrimary Key 也就是主键的缩写。一般每个表都有个主键,如果没有特殊命名,一般来说就是 id 字段。

    打开 Postman,再来来测试一下。确实可以拿到当前文章

    查询接口

    修改

    router.put('/:id', async function (req, res, next) {
        var article = await models.Article.findByPk(req.params.id);
        article.update(req.body);
        res.json({article: article});
    });
    

    修改接口和刚才的查询接口类似,需要注意的是这里是 put 请求。也是要接受一个 id,查询到到当前文章以后,使用 update 方法来修改数据。最后返回被修改过的文章就好了。

    修改接口

    刷新数据库,当前记录确实被修改了

    修改接口

    删除

    router.delete('/:id', async function (req, res, next) {
        var article = await models.Article.findByPk(req.params.id);
        article.destroy();
        res.json({msg: '删除成功'});
    });
    

    最后一个接口,删除数据。先使用新增接口,胡乱添加一条新数据,然后通过接口来删除它。这里使用的请求方式是 delete。也是查询到当前文章后,直接调用 destroy 方法删掉它。因为文章已经被删除了,也没啥好返回的了,就简单的返回一个 msg: '删除成功' 好了。

    删除接口

    总结

    基础的 CURD 四个接口,也就这么点内容了。需要重点注意的是他们的请求方式:

    路由 请求方式 含义
    /articles get 查询所有文章
    /articles/:id get 查询指定 id 的文章
    /articles post 新增文章
    /articles/:id put 编辑指定 id 的文章
    /articles/:id delete 删除指定 id 的文章

    大家可以观察下,他们有些路径是一模一样的,只是请求的方式不同,实际对应的路由方法也就不同了。这种写法的路由就是符合 Restful 风格的路由。

  • 相关阅读:
    SQL select结果集和return的区别
    转发:上海软件公司排行 (估计是2008年的吧)
    还未复习的
    转发:IT行业中的甲方乙方关系
    多线程 异步调用委托
    用sessionStorage实现页面之间的数据传输
    【转】Vue.js:轻量高效的前端组件化方案
    几种web数据渲染模板对比
    ThinkPHP执行原生sql,实现一些复杂的业务需求
    listview可见再加载图片
  • 原文地址:https://www.cnblogs.com/chenxi188/p/13845082.html
Copyright © 2020-2023  润新知