0

我有一个 node.js 服务器使用 node-mysql 提取数据并将其保存到一个名为 FRUITS 的数组中。

我需要使用我使用'readStream'发送给客户端的javascript文件来传输这个数组(FRUITS)的值。

关于如何做到这一点的任何想法?下面的代码

节点控制器.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
    })
}
4

1 回答 1

0

这会将 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

于 2015-12-01T12:55:39.920 回答