NodeJSとExpressでRest APIを作成しています。リモートHANAデータベース&と1つのクエリを実行します。今私は非常に大きなデータであるので、それを完全に送信するのではなく、チャンクにブラウザに送信できるようにHTTP応答をストリーミングしたいと思います。NodeJSとExpressのストリームレスAPI HTTP応答
私は出力を出さないものを試しました。私はその理由を知らない。 response.send(data)を使用してブラウザに完全な応答を送信すると、正常に動作しています。しかしストリーミングは現在機能しています。
以下にコードスニペットを追加しました。助けてください。
const express = require("express");
const APP = express();
const HANA_DB = require('hdb');
const BODY_PARSER = require("body-parser");
start();
function start() {
startServer();
initializeExpress();
APP.get("/data", function(request, response) {
var connection = HANA_DB.createClient({
host : "hostname",
port : "port",
user : "username",
password : "password"
});
connection.on('error', function (error) {
console.log("Error in database connection...");
});
connection.connect(function (error) {
if (error) {
console.log("Error in database connection...");
return;
}
var query = "SELECT * FROM TableName";
connection.exec(query, function(error, result) {
if(error) {
response.send("Getting error while fetching result...");
return;
}
//response.send(data);
var datalength = 0;
request.on('data', function(chunk) {
datalength += chunk.length;
console.log("DATA EVENT: " + datalength);
response.send(datalength);
})
.on('end', function() {
console.log("END EVENT: " + datalength);
response.send(datalength);
});
});
});
});
};
function initializeExpress() {
APP.all('/*', function(request, response, next) {
response.header("Access-Control-Allow-Origin", "*");
response.header("Access-Control-Allow-Headers", "X-Requested-With");
response.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
response.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
APP.use(BODY_PARSER.json());
APP.use(BODY_PARSER.urlencoded({ extended: true }));
};
function startServer(config) {
var server = APP.listen("8081", function(error) {
if(error) {
console.log("Unable to connect to 127.0.0.1:8081");
return;
}
console.log("Server is listening at - 127.0.0.1:8081");
});
};
データと終了イベントをクエリで返す結果を設定する必要があるということですか?私はそれを試しましたが、result.onは関数ではないと言っています。結果は書き込み可能なストリームではないため、どのようにして可能でしょうか。 –
あなたのソリューションに感謝します。私は.executeメソッドを試してみました。それは私のために働いています。しかし、今私はデータイベントでブラウザにチャンクデータを送信する問題に直面している。私は、 "送信後にヘッダーを設定できません"というエラーを返すresponse.send(チャンク)を試しています。それはresponse.send(チャンク)のようです、私は1回だけ実行できます。もしそうなら、私はどのようにデータイベントでブラウザにチャンクを送るでしょう。 –
@DeveshM私が言ったように、私は決して 'hdb'を使用しなかったので、私はあなたをさらに助けることはできません申し訳ありません。 –