Wysłanie zapytania SQL Server

Wysłanie zapytania SQL Server
adams0
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 4 godziny
  • Postów:318
0

Cześć.
W nawiązaniu do poprzedniego postu: https://4programmers.net/Forum/JavaScript/365893-laczenie_sie_z_sql_server_przy_uzyciu_promise?p=1888650#id1888650

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

Kopiuj
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.

edytowany 2x, ostatnio: Riddle
G8
Twoje zapytanie musi coś zwrócić (return) W linii 7 wykonaj zapytanie i .then ((result) => { res.status(200).send(result)})
adams0
Po pierwsze nie wiem jak zwrócić skoro to zapytanie same w sobie jest asynchroniczne. Po drugie chciałbym to zrobić bez użycia promisów (czyli bez .then() )
Vanos
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 lata
  • Postów:8
0

Uzupełniony kod:

Kopiuj
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);  
}

adams0
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 4 godziny
  • Postów:318
0

Nie działa.
Ten fragment:

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

Nie wie skąd wziąć "res"

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Laska, z Polski
  • Postów:10081
0
adams0 napisał(a):

Nie działa.
Ten fragment:

Kopiuj
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.

adams0
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 4 godziny
  • Postów:318
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.

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Laska, z Polski
  • Postów:10081
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.