Node.Js Извлекает определенные данные из SQL Server и кодирует их в массив JSON. - PullRequest
0 голосов
/ 18 октября 2019

Я знаю, что у этого вопроса много дубликатов, но я уже потратил слишком много времени на поиск правильного решения.

Сначала взгляните на мой 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]}

Я не знаю почему, но по какой-то причине результат всегда приводит к дублированию.

И какпросто выберите InvoiceID и InvoiceNumber?

Я уже тестировал с использованием recordset.InvoiceID или recordset[0].InvoiceID, но все всегда напрасно, а результат всегда в двух экземплярах.

Может кто-нибудь объяснитькак это сделать правильно?

Я хочу, чтобы конечный результат стал таким:

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

1 Ответ

0 голосов
/ 21 октября 2019

Для дальнейшего использования, я наконец-то понял, как это сделать, вот мой полный код

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..');
});

, и результат приведенного выше кода выглядит так:

ответы

с указанным выше кодом вы можете получить только определенное поле и делать с этими конкретными данными все, что захотите, например, изменить формат даты или кодировать base64. я не знаю, является ли это самым чистым способом сделать это, так как node.js имеет свою собственную функцию, использующую res.json, которая может устанавливать все поля извлекаемых данных без необходимости проходить через них.

Но по крайней меревот мое решение, надеюсь, оно будет полезно будущим людям, которые интересуются тем же, что и я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...