Wysłanie zapytania SQL Server

0

Cześć.
W nawiązaniu do poprzedniego postu: Łączenie się z SQL Server przy użyciu promise

Próbuję połączyć takie zapytanie z API ale nie wiem jak to zrobić.
Mam taki kod:

const {Connection, Request} = require('tedious')
const express = require('express');

const server = express();

server.get('/query', (req, res)=> {
    // Co tu wpisać ?
    res.send(sqlData)
})

server.listen(1238, '127.0.0.1');

var config = {  
    server: 'DESKTOP-XYZ',  
    authentication: {
        type: 'default',
        options: {
            userName: 'node', 
            password: '123456'  
        }
    },
    options: {
        encrypt: false,
        database: 'test'
    }
};  
var connection = new Connection(config);  

function executeStatement() {  
    const request = new Request("SELECT * FROM dbo.users", function(err) {  
    if (err) {  
        console.log(err);}  
    });  
    var result = "";  
    request.on('row', function(columns) {  
        columns.forEach(function(column) {  
          if (column.value === null) {  
            console.log('NULL');  
          } else {  
            result+= column.value + " ";  
          }  
        });  
        console.log(result);  
        result ="";  
    });  
    
    request.on("requestCompleted", function (rowCount, more) {
        connection.close();
    });

    connection.execSql(request);  
}  

Jak mogę wykonać to zapytanie tak żeby móc go użyć w response.send()?
Chciałbym to zrobić za pomocą EventEmmitera a nie async/await.

0

Uzupełniony kod:

const express = require('express');
const EventEmitter = require('events');
const emitter = new EventEmitter();

const server = express();

emitter.on('query-complete', (data) => {
    res.send(data);
});

server.get('/query', (req, res)=> {
    executeStatement(res);
});

server.listen(1238, '127.0.0.1');

var config = {  
    server: 'DESKTOP-XYZ',  
    authentication: {
        type: 'default',
        options: {
            userName: 'node', 
            password: '123456'  
        }
    },
    options: {
        encrypt: false,
        database: 'test'
    }
};  
var connection = new Connection(config);  

function executeStatement(res) {  
    const request = new Request("SELECT * FROM dbo.users", function(err) {  
    if (err) {  
        console.log(err);}  
    });  
    var result = "";  
    request.on('row', function(columns) {  
        columns.forEach(function(column) {  
          if (column.value === null) {  
            console.log('NULL');  
          } else {  
            result+= column.value + " ";  
          }  
        });  
    });  
    request.on("requestCompleted", function (rowCount, more) {
        connection.close();
        emitter.emit('query-complete', result);
    });

    connection.execSql(request);  
}

0

Nie działa.
Ten fragment:

emitter.on('query-complete', (data) => {
    res.send(data);
});

Nie wie skąd wziąć "res"

0
adams0 napisał(a):

Nie działa.
Ten fragment:

emitter.on('query-complete', (data) => {
    res.send(data);
});

Nie wie skąd wziąć "res"

A musisz to robić przez EventEmitter?

Bo jeśli przekażesz swój res, a ten EventEmitter go zserializuje (tak jak robią niektóre emitery), to tak czy tak nie wyślesz tej odpowiedzi. Musiałbyś być pewien że EventEmitter zachowa Ci referencję do tego res.

0

Prawda jest taka że już to wszystko zrobiłem wcześniej na promisach używając tej biblioteki: https://www.npmjs.com/package/mssql.

Ale byłem bardzo ciekaw jak ludzie to robili w czasach kiedy jeszcze nie było promisów.
Założyłem że w oparciu o EventEmitter.

0
adams0 napisał(a):

Prawda jest taka że już to wszystko zrobiłem wcześniej na promisach używając tej biblioteki: https://www.npmjs.com/package/mssql.

Ale byłem bardzo ciekaw jak ludzie to robili w czasach kiedy jeszcze nie było promisów.
Założyłem że w oparciu o EventEmitter.

Callbacki zwykłe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1