Node.Js从SQL Server检索特定数据并将其编码为JSON数组

时间:2019-10-18 08:29:43

标签: node.js sql-server

我知道这个问题有很多重复之处,但是我已经浪费了太多时间寻找正确的解决方案。

首先看一下我的Node.JS:

var express = require('express');
var app = express();

app.get('/', function (req, res) { 
    var sql = require("mssql");

    // config for your database
    var config = {
        user: 'myuser',
        password: 'mypass',
        server: 'myip', 
        database: 'mydatabase' 
    };
    sql.close();
    // connect to your database
    sql.connect(config, function (err) {

        if (err) console.log(err);
        var dataqu = '';
        // create Request object
        var request = new sql.Request();

        // query to the database and get the records
        request.query("select * from AR_Invoices", function (err, recordset) {
            if (err) console.log(err) 
            res.json(recordset);
            sql.close();
        }); 
    });
});

var server = app.listen(5000,'0.0.0.0', function () {
    console.log('Server is running..');
});

此代码运行良好,但json结果结构如下:

{"recordsets":[[{"Tipe":"Invoices","InvoiceID":411891,"InvoiceNumber":"SR.1701.0001"}]],"recordset":[{"Tipe":"Invoices","InvoiceID":411891,"InvoiceNumber":"SR.1701.0001"}],"output":{},"rowsAffected":[1]}

我不知道为什么,但是由于某种原因,结果总是重复。

以及如何仅选择InvoiceIDInvoiceNumber

我已经使用recordset.InvoiceIDrecordset[0].InvoiceID进行了测试,但所有结果都是徒劳的,结果始终是重复的。

任何人都可以解释如何正确执行此操作吗?

我希望最终结果变成这样:

[
   { "InvoiceID":"1", "InvoiceNumber":"mynumber" }
]

1 个答案:

答案 0 :(得分:0)

为了以后的参考,我终于知道了如何做,这是我的完整代码

var express = require('express');
var app = express(); 
var dateFormat = require('dateformat');

app.get('/', function (req, res) { 
    var sql = require("mssql");

    // config for your database
    var config = {
        user: 'myuser',
        password: 'mypassword',
        server: 'myip', 
        database: 'mydb' 
    };
    sql.close();
    // connect to your database
    sql.connect(config, function (err) {

        if (err) console.log(err); 
        // create Request object  
        var request = new sql.Request();

        // query to the database and get the records
        request.query("select top 2 'Invoices' as Tipe,InvoiceID,InvoiceNumber,InvoiceDate,(select top 1DriverPicture from dbDigitalApp.dbo.tbdriver) as Blob from AR_Invoices", function (err, result) {       


            if (err) console.log(err)  

            var myarr = new Array();

            for (var i = 0; i < result.recordset.length; ++i) {
                var InvoiceNumber = result.recordset[i].InvoiceNumber;
                var InvoiceDate = dateFormat(result.recordset[i].InvoiceDate, "dd mmmm yyyy");
                var Blob = result.recordset[i].Blob;
                myarr.push({'InvoiceNumber':InvoiceNumber,'InvoiceDate':InvoiceDate,'Blob':Buffer.from(Blob).toString('base64')});

            }   

            res.json(myarr);

            sql.close();
        }); 



    });

});

var server = app.listen(5000,'0.0.0.0', function () {
    console.log('Server is running..');
});

上面的代码结果如下:

answers

使用上述代码,您只能获得特定字段,并且可以对这些特定数据执行任何所需的操作,例如更改日期格式或对base64进行编码。 我不知道这是否是最干净的方法,因为node.js具有使用res.json的自己的功能,该功能可以设置检索数据的所有字段,而无需遍历它。

但是至少这是我的一种解决方案,希望它对将来想知道与我一样的事情的人们有帮助。