nodeJs中实现连表查询

简介: 在Node.js中,这段代码演示了如何使用Promise处理异步数据库查询以实现连表查询。首先,通过Promise从`orders`表中获取指定用户ID的订单,然后对每个订单,再次使用Promise查询对应的`food`信息。查询结果合并后,将foodList添加到对应订单对象。最后,使用Promise.all处理并发查询并发送响应。文章还介绍了Promise的基础知识,包括创建Promise、处理状态变化以及Promise.all和Promise.race方法。

nodeJs中实现连表查询

router.post('/getOrder', async function(req, res, next) {
   
   
    let userId = req.body.phone;

    let sql = 'select * from orders where userId=?';
    let orders = await new Promise((resolve, reject) => {
   
   
        connection.query(sql, [userId], function(error, result) {
   
   
            if (error) {
   
   
                reject(error);
            } else {
   
   
                resolve(result);
            }
        });
    });

    for (let i = 0; i < orders.length; i++) {
   
   
        let foodId = orders[i].foodId;
        let foodSql = 'select * from food where id=?';
        let food = await new Promise((resolve, reject) => {
   
   
            connection.query(foodSql, [foodId], function(error, result) {
   
   
                if (error) {
   
   
                    reject(error);
                } else {
   
   
                    resolve(result);
                }
            });
        });
        orders[i].foodList = food; // 将foodList数组添加到对应的order对象中
    }

    console.log('Orders with Food List:', orders);

    res.send({
   
   
        code: 200,
        data: {
   
   
            data: orders
        }
    });
});

在这里插入图片描述

异步操作

Promise是用于处理异步操作的对象,它代表了一个异步操作的最终完成或失败,以及其结果值。Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。以下是Promise的基本用法:

创建一个Promise对象:

let myPromise = new Promise((resolve, reject) => {
   
   
    // 异步操作,比如数据库查询、文件读取等
    if (/* 操作成功 */) {
   
   
        resolve('操作成功,返回结果');
    } else {
   
   
        reject('操作失败,返回错误信息');
    }
});

处理Promise对象的状态:

myPromise.then((result) => {
   
   
    // 当Promise状态为fulfilled时调用,result为操作成功的结果
    console.log(result);
}).catch((error) => {
   
   
    // 当Promise状态为rejected时调用,error为操作失败的错误信息
    console.log(error);
});

Promise.all():用于将多个Promise实例包装成一个新的Promise实例,当所有Promise实例的状态都变为fulfilled时,新的Promise实例的状态才会变为fulfilled;只要有一个Promise实例的状态变为rejected,新的Promise实例的状态就会变为rejected。

let promise1 = Promise.resolve(1);
let promise2 = Promise.resolve(2);

Promise.all([promise1, promise2])
    .then((results) => {
   
   
        console.log(results); // [1, 2]
    })
    .catch((error) => {
   
   
        console.log(error);
    });

Promise.race():用于将多个Promise实例包装成一个新的Promise实例,只要其中一个Promise实例的状态发生变化,新的Promise实例的状态就会跟着变化。

let promise1 = new Promise((resolve) => setTimeout(resolve, 500, 'one'));
let promise2 = new Promise((resolve) => setTimeout(resolve, 100, 'two'));

Promise.race([promise1, promise2])
    .then((value) => {
   
   
        console.log(value); // 'two'
    });

🎉写在最后

🍻伙伴们,如果你已经看到了这里,觉得这篇文章有帮助到你的话不妨点赞👍或 Star ✨支持一下哦!手动码字,如有错误,欢迎在评论区指正💬~

你的支持就是我更新的最大动力💪~

目录
相关文章
|
28天前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
7月前
|
数据库 JavaScript SQL
❤Nodejs 第八章(操作本地数据库优化查询为分页查询方式)
【4月更文挑战第8天】在Node.js中,本章讲述了如何优化本地数据库查询以实现分页。首先,添加了前端分页参数`pageNum`(页码)和`pageSize`(每页条数)。接着,通过打印`req.query`来验证参数是否正确传递。初始查询示例为`SELECT * FROM user WHERE age = 18 LIMIT 0, 10`。当改变分页参数时,查询能相应更新。在实现动态偏移量`offset`时,起初因误添加`&#39; AND&#39; : &#39; WHERE&#39;`导致错误,修正后使用`LIMIT`和计算出的`offset`进行分页。
157 5
❤Nodejs 第八章(操作本地数据库优化查询为分页查询方式)
|
7月前
|
前端开发 JavaScript 数据库
nodeJs中实现连表查询
在Node.js中,该代码示例展示了如何使用Promise处理异步数据库查询,实现连表查询获取订单及关联的食物信息。首先,通过Promise查询orders表中属于指定用户的所有订单,然后对每个订单循环执行另一个Promise查询food表中对应的食物详情,并将食物列表添加到订单对象。最后,返回HTTP响应包含订单数据。文中还介绍了Promise的基本用法,包括创建Promise、处理状态变化,以及Promise.all()和Promise.race()的使用。
54 2
|
SQL JavaScript 关系型数据库
node.js控制mysql的查询语句
node.js控制mysql的查询语句
85 0
|
网络架构
【Node.js+koa--后端管理系统】设计标签创建、查询、接口 | 标签绑定到动态
【Node.js+koa--后端管理系统】设计标签创建、查询、接口 | 标签绑定到动态
180 0
【Node.js+koa--后端管理系统】设计标签创建、查询、接口 | 标签绑定到动态
|
中间件
【Node.js+koa--后端管理系统】设计评论发布、修改、查询、删除接口
【Node.js+koa--后端管理系统】设计评论发布、修改、查询、删除接口
237 0
【Node.js+koa--后端管理系统】设计评论发布、修改、查询、删除接口
|
中间件 数据库
【Node.js+koa--后端管理系统】设计动态发布、修改、查询、删除接口
【Node.js+koa--后端管理系统】设计动态发布、修改、查询、删除接口
235 0
【Node.js+koa--后端管理系统】设计动态发布、修改、查询、删除接口
|
缓存 监控 JavaScript
Node.js躬行记(10)——接口日志查询
  当运营向我们上报BUG时,我们第一时间是捕获相关的接口。从监控系统中,就可以查到用户使用时接口的请求和响应数据。   若接口的请求正常,那么就需要深入到接口代码中,查看相关的日志,通常会先浏览数据库查询语句以及内部接口的通信日志。   在本地也可以查看到上述日志,但有个问题,有时候打开某个页面会报错,那是因为本地的数据库没有与测试或正式环境的同步。   可能是有些字段缺失了,也可能是某张表缺失了,情况比较多。所以,最保险的是在测试或正式环境查看。
Node.js躬行记(10)——接口日志查询
|
NoSQL JavaScript MongoDB
Node.js 使用 MongoDB 的 ObjectId 作为查询条件
当往MongoDB中插入一条数据时,会自动生成ObjectId作为数据的主键。那么如何通过ObjectId来做数据的唯一查询呢? 在MongoDB中插入一条数据 在MongoDB中插入一条如下结构的数据: { _id: 5d6a32389c825e24106624e4, title: 'GitHub 上有什么好玩的项目', content: '上个月有水友私信问我,GitHub 上有没有比较好玩的项目可以推荐?我跟他说:"有,过两天我整理一下"。
1976 0
|
NoSQL 前端开发 MongoDB
Node MongoDB查询列表带分页
前端需要的数据结构 { "code": "0000", "desc": "OK", "body":{ "page_no": 1,//当前第几页 ...
1506 0