如何从 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中连接多个表?