如何从 mysql 数据库中检索行并通过 Express.js 将它们作为 JSON 发送?

Posted

技术标签:

【中文标题】如何从 mysql 数据库中检索行并通过 Express.js 将它们作为 JSON 发送?【英文标题】:How can I retrieve rows from mysql database and send them as JSON via Express.js? 【发布时间】:2021-06-01 13:35:53 【问题描述】:

我是 Node.js 的初学者,我想通过 Express.js 以 JSON 的形式同时发送注册变量和声明变量

这是我现在想出的唯一方法,但它甚至不起作用。

app.get('/item_reg', (req, res) => 
    var registered = connection.query("SELECT JSON_OBJECT('name', item_name, 'item_id', item_id, 'location', location_desc, 'color', color, 'description', description, 'image', image_url) AS 'Registered' FROM Items_found WHERE type = 0");
    var claimed = connection.query("SELECT JSON_OBJECT('name', item_name, 'item_id', item_id, 'location', location_desc, 'color', color, 'description', description, 'image', image_url)  AS 'Claimed' FROM Items_found WHERE type = 1");
    //sending a response
    res.json([[registered], [claimed]]);
);

这是我的数据库,但我只想要上面查询中的一些属性,而不是全部。

enter image description here

提前谢谢你。

【问题讨论】:

你说它不起作用是什么意思?在哪里?当您在浏览器上加载 localhost:port/item_reg 时会发生什么? 这就是发生的事情。 TypeError: 将循环结构转换为 JSON --> 从带有构造函数 'Socket' 的对象开始 |属性“_writableState”-> 带有构造函数“WritableState”的对象 |属性“afterWriteTickInfo”-> 带有构造函数“对象”的对象---属性“流”关闭了圆圈 你应该add that information into your question。我建议您在 *** 中搜索有关此特定问题的信息。我想你会找到something similar 【参考方案1】:

你在使用 mysql 吗?我假设你的项目中已经安装了 mysql 模块。 Mysql.query 函数将函数作为参数(回调),所以获取 async/await 或 promise,你可以试试这个:

// mysql module
const mysql = require('mysql');
const connection = mysql.createConnection(
  // environment mysql here
);

// util module for handle callback in mysql query
const util = require('util');

// create variable to get result from querying
let resultQuery = util.promisify(connection.query).bind(connection);

// so in your route use async/await and try catch 
app.get('/item_reg', async (req, res) => 
    try 
    // use resultQuery instead as await
    var registered = await resultQuery("SELECT JSON_OBJECT('name', item_name, 'item_id', item_id, 'location', location_desc, 'color', color, 'description', description, 'image', image_url) AS 'Registered' FROM Items_found WHERE type = 0");
    var claimed = await resultQuery("SELECT JSON_OBJECT('name', item_name, 'item_id', item_id, 'location', location_desc, 'color', color, 'description', description, 'image', image_url)  AS 'Claimed' FROM Items_found WHERE type = 1");
    //sending a response
    // the query string is select JSON_OBJECT, is that return json string as result? if yes, so :
    registered = JSON.parse(registered);
    claimed = JSON.parse(claimed);
    res.json( registered, claimed );
     catch (err) 
        res.json( message: 'error message');
    
);

【讨论】:

【参考方案2】:

异步流将是罪魁祸首。 你可以试试

connection.query("SELECT JSON_OBJECT('name'........", function(err,results,fields)
    registered = results;
);
connection.query("SELECT JSON_OBJECT('name'........", function(err,results,fields)
    claimed = results;
);

【讨论】:

以上是关于如何从 mysql 数据库中检索行并通过 Express.js 将它们作为 JSON 发送?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过匹配(字符串到数组和数组到数组)从mysql存储和检索数组数据我在从mysql获取数据时遇到问题

jquery - 如何使用通过 AJAX 从 MySQL 和 PHP 检索的数据将图像添加到 Select2 下拉列表?

如何从SQL表中选择特定行并在SQL Server中连接多个表?

如何在 MySQL 中使用自动增量字段复制行并插入到同一个表中?

通过 MySQL 从数据库中检索丢失的日期

Eloquent - 编辑表格行并返回新结果数据 - 检索旧数据