美文网首页
跟我一起学NodeJS之操作数据库

跟我一起学NodeJS之操作数据库

作者: 喜剧之王爱创作 | 来源:发表于2020-04-13 10:04 被阅读0次
nodejs.jpg

之前的笔记中讲到了如何在nodejs中链接数据库, 以及我们将链接数据库封装为一个方法,这节我们将介绍在项目中使用我们的封装去操作数据库。

处理Get请求

因为之前我们在controller中使用的是假数据,所以我们要连接数据库,就要先从controller中入手了,以获取博客列表为例,其他GET请求同理。

//controller中blog.js
const { exec } = require('../db/mysql')
const getList = (author, keyword) => {
    let sql = `select * from blogs where 1=1 `//这里1=1是一个占位作用,避免author或者keyword不存在时sql语句报错
    if (author) {
        sql += `and author='${author}' `
    }
    if (keyword) {
        sql += `and title like '%${keyword}%' `
    }
    sql += `order by createtime desc;`
    // 返回promise
    return exec(sql)
}

这里有几点主要注意:

  • 在拼sql时,‘where 1=1’是为了author或keyword为空时,sql依然是合法的。
  • 我们要将exec返回的promise返回,以供router中使用

controller过后,就会走到routrt中,我们按照这个流程对router进行改造

//router中的blog.js
//获取博客列表
if (method === 'GET' && req.path === '/api/blog/list') {
    const author = req.query.author || ''
    const keyword = req.query.keyword || ''
    // const listData = getList(author,keyword)
    // return  new SuccessModel(listData)
    const result = getList(author, keyword)
    return result.then(listData => {
        return new SuccessModel(listData)
    })
}

上面代码中注意两点

  • 传参不变,只是处理结果上的改变吗,因为comtroller中返回一个promise,所以,这里要从promise中获取
  • 我们仍然要返回一个promise以供我们在app中使用。

最后我们对app.js进行改造

const blogResult = handleBlogRouter(req, res)
if (blogResult) {
    blogResult.then(blogData => {
        res.end(
            JSON.stringify(blogData)
        )
    })
    return
}

同理,我们将之前的直接处理数据,变为处理一个promise。

处理POST请求

处理post请求同理,我们不需要再在app.js和router中做改动,直接改动原先使用假数据的controller即可。

const newBlog = (blogData = {}) => {
    //blogData是一个博客对象,包含title content, author 等属性
    const title = blogData.title
    const content = blogData.content
    const author = blogData.author
    const createtime = Date.now()
    const sql = `
        insert into blogs (title,content,createtime,author)
        values ('${title}', '${content}', '${createtime}', '${author}');
    `
    return exec(sql).then(insertData => {
        return {
            id: insertData.insertId
        }
    })
}

操作和GET请求无太大差异,只需要注意一下一点

  • 因为POST请求返回一个操作后的对象,所以我们在返回结果的时候需要从数据库操作对象中提取必要的信息

到这里,在NodeJs中操作数据库已经将完,希望同学们可以举一反三把每一个接口都自己手打一遍,接下来,我们就是讲登陆了。

相关文章

  • 跟我一起学NodeJS之操作数据库

    之前的笔记中讲到了如何在nodejs中链接数据库, 以及我们将链接数据库封装为一个方法,这节我们将介绍在项目中使用...

  • nodejs操作mysql数据库

    今天粗略的研究了一下nodejs操作数据库的包,觉得nodejs连接数据库不错。 nodejs如何操作mysql?...

  • 跟我一起学NodeJS之安全

    安全 本篇介绍web server (Nodejs)层面上存在的安全问题,并解决 sql注入 sql注入就是我们我...

  • XDH_LESSON8

    nodejs操作mongodb数据库 NodeJs为什么要用mongoose操作mongodb直接用mongodb...

  • mongodb学习3

    Nodejs 操作 MongoDb数据库 在 Nodejs 中使用 MongodbNodejs 连接 MongoD...

  • NodeJs

    NodeJs 数据库(database) 概念 数据库常用类型 Node操作数据库 数据库常用操作

  • 跟我一起学NodeJs之登录验证

    前面我们讲了数据库的操作,已经可以轻松实现增删改查,接下来,就是服务端开发中的一个重点,就是登录验证,本篇文章由浅...

  • 跟我一起学NodeJS之数据存储

    今天讲NodeJS的数据存储,让我们告别假数据,开始吧! mysql的安装和链接 这里提供两个链接,同学们自己去按...

  • 学习笔记-0815-nodejs 操作mongodb数据库

    nodejs 操作mongodb数据库 黄金搭档nodejs 自带组件mongodb/mongoose mongo...

  • 跟我一起学NodeJS(一)

    随着开发技术的不断更新,NodeJS写服务端已经得到了广泛的实践,因为NodeJS和前端JS都是使用ECMAScr...

网友评论

      本文标题:跟我一起学NodeJS之操作数据库

      本文链接:https://www.haomeiwen.com/subject/ihowmhtx.html