【问题标题】:How to get data from database in array format using node js and MySql如何使用node js和MySql以数组格式从数据库中获取数据
【发布时间】:2020-02-29 12:40:32
【问题描述】:

我使用 node.js 作为服务器语言和 Mysql 作为数据库,所以我正在运行查询并从数据库中获取数据,但显示格式如下

  [ BinaryRow { name: 'Dheeraj', amount: '77.0000' },
    BinaryRow { name: 'Raju', amount: '255.0000' } ]

我想要的是

    ['Dheeraj', 77.0000],
    ['Raju', 66255.000030],

这就是我在后端 (node.js) 中所做的:

我的模特:

static getChartData(phoneNo, userType) {

        let sql = 'select businessname as name,sum(billamt) amount from cashbackdispdets where consphoneno =' + phoneNo + ' group by  businessid order by tstime desc limit 10'
        return db.execute(sql, [phoneNo]);

我的控制器:

exports.getColumnChart = function(req, res) {
    const phoneNo = req.body.userId
    const userType = req.body.userType
    console.log(phoneNo)
    dashboardModule.getChartData(phoneNo, userType)
        .then(([rows]) => {
            if (rows.length > 0) {
                console.log(rows)
                return res.json(rows)
            } else {
                console.log("error")
                return res.status(404).json({ error: 'Phone No. already taken' })
            }
        })
    .catch((error) => {
        console.log(error)
        return res.status(404).json({ error: 'Something went wrong !!' })
    })
}

我将此数据发送到Ui,当我在UI 上接收它时,它是数组内的对象形式,这不是我想要的所需数据类型

axios().post('/api/v1/Dashboard/DashboardColumnChart',this.form)
  .then(res=>{
    console.log(res.data)
    debugger
  this.chartData= res.data
       })

以上代码控制台在浏览器上,如

我不知道应该如何使用后端或前端以及如何进行操作

【问题讨论】:

  • 为此目的使用名为 Sequelize 的 ORM(对象关系映射)库。它将使查询和接收数据变得更加简单。
  • @HussainNawazLalee 你能帮我举个小例子吗
  • 你必须添加一些样板文件,所以如果你已经在项目中走了很长一段路,我不推荐它,但如果你刚刚开始,你可以开始使用这个库。在您的项目中设置了 sequelize 之后。假设您想SELECT * FROM Products。 Sequelize 将定义Product 模型,您只需调用Product.findAll(),它将以 JSON 格式返回所有产品。您还有一些有用的方法,例如 incldue 来获取 related Tables as nested objects 以及许多其他可以轻松使用 Node 的方法
  • 对于当前的用例,我添加了一个答案,可以帮助您格式化数据
  • 您的代码目前也容易受到 SQL 注入的攻击,因此我真的建议您重新审视构建查询的方式,如果在 prod 中使用这种方式。

标签: mysql node.js vuejs2


【解决方案1】:

如果您想更改它,Nodejs 会向您发送 JSON 响应。最好在前端框架中更改或操作它。但是,如果您想按照您的要求在后端更改它,请确保这些行采用您想要接收的格式。

 let data = [ 
        { "name": "Dheeraj", "amount": "77.0000" }, 
        { "name": "Raju", "amount": "255.0000" } 
    ]
    // empty array to store the data
    let testData = [];
    data.forEach(element => {
          testData.push(element.name)
    });

【讨论】:

  • 在 Ui 上,我不知道该怎么做(操作),并且在后端它以数组格式的对象形式出现
  • 你用什么来做这个应用程序的前端。这很正常,Node js 会将响应作为 JSON 对象发送。如果您想以该特定格式发送。使用return res(rows)。它将解决您的问题,然后它将不是 JSON 类型的对象。这将是简单的回应
  • vuejs 我正在使用并且从节点我发送简单的响应,它将以 [{}] 的形式发送,这只是我想以上面的数组形式发送它,如 [][]我的帖子我已经展示了,我怎么能在前端没有任何想法的情况下做到这一点
  • 我收到了这样的回复 [ { "name": "Dheeraj", "amount": "77.0000" }, { "name": "Raju", "amount": "255.0000" } ] 但我想要 ['Dheeraj', 77.0000], ['Raju', 66255.000030], 这个
  • 亲爱的朋友,让我在您的前端应用程序或后端解决您的问题,您可以应用以下代码。数据是来自服务器的响应。现在我们将进行手动操作。检查我为你更新的答案。
【解决方案2】:

您可以使用array.mapObject.values 对其进行格式化。 map 函数循环遍历每个元素并根据提供的回调返回修改后的元素。 Object.values 只返回一个数组中对象的所有值。

const data = [ { "name": "Dheeraj", "amount": "77.0000" }, { "name": "Raju", "amount": "255.0000" } ];

const formattedData = data.map(obj => Object.values(obj));

console.log("Initial Data: ", data);
console.log("Formatted Data: ", formattedData);


// Map function example
const a = [1,2,3]
const mappedA = a.map(e => e * 2)
console.log(a, " mapped to: ", mappedA);

// Object.values example
const b = { firstName: 'John', lastName: 'Doe', number: '120120' }
console.log(Object.values(b));

【讨论】:

  • 您可以使用parseInt(string) 将您的string 转换为number
猜你喜欢
  • 2020-01-25
  • 2021-10-03
  • 1970-01-01
  • 2017-08-06
  • 2016-11-20
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 2018-03-07
相关资源
最近更新 更多