Отправка значения массива клиенту вместе с файлом javascript через readStream?
У меня есть сервер node.js, извлекающий данные с помощью node-mysql и сохраняющий их в массив с именем FRUITS.
Мне нужно передать значение этого массива (FRUITS) с помощью файла javascript, который я отправляю клиенту, используя readStream.
Есть идеи, как это сделать? Код ниже
nodeController.js
function sendJSfile(req, res) {
seed_id = "valid_fruits"
var mysql = require('mysql');
var end;
var connection = mysql.createConnection({
host: 'myhost',
user: 'username',
password: 'password',
database: 'databasename'
});
connection.connect()
connection.query({
sql: 'SELECT fruit_type FROM fruit_table WHERE seed_id = ? LIMIT 0, 10',
timeout: 4000,
values: [seedid]
}, function (err, result, fields) {
var FRUITS = [];
for (var i = 0; i < result.length; i++) {
var obj = result[i]
FRUITS.push(obj.fruit_type)
}
})
res.writeHead(200, { "Content-Type": "text/javascript" });
var readStream = fs.createReadStream("./fruits.js")
readStream.on('open', function () {
readStream.pipe(res);
});
readStream.on('error', function (err) {
res.end(err);
})
Client.js
// I use a post request because I need to send data to the server then receive the javascript file back via readStream
request("myserver", "post", { apples })
.done(function (res) {
})
})
function request(url, method, data) {
return $.ajax({
url: url,
method: method,
data: data
})
}
1 ответ
Это добавит массив fruits как JSON к файлу js и выполнит его потоковую передачу:
connection.query({
sql: 'SELECT fruit_type FROM fruit_table WHERE seed_id = ? LIMIT 0, 10',
timeout: 4000,
values: [seedid]
}, function(err, result, fields) {
var FRUITS = [];
for(var i = 0; i < result.length; i++) {
var obj = result[i]
FRUITS.push(obj.fruit_type);
}
var fileVar = 'var FRUITS = '+JSON.stringify(FRUITS)+';';
fs.appendFile('./fruits.js', fileVar, function(err) {
res.writeHead(200, {
"Content-Type": "text/javascript"
});
var readStream = fs.createReadStream("./fruits.js")
readStream.on('open', function() {
readStream.pipe(res);
});
readStream.on('error', function(err) {
res.end(err);
})
});
});
Таким образом, вы добавите это var FRUITS = ["apple","banana"];
к fruits.js
так что вы можете использовать FRUITS
как переменная, если вы используете fruits.js
как сценарий.