1

私は次のようなコードを持っています:

app.get('/list', function(req, res) {
    serialport.list(function (err, ports) {
        ports.forEach(function(port) {
            var temp = port.manufacturer;
            console.log(temp);
            res.send(temp);
        });
    });
});

ご覧のとおり、port.manufacturer値は可変温度に保存され、結果の温度の内容がコンソールに表示されます。

上記のコードを実行すると、コンソールに次のようなものが表示されます。

Listening on port 3000...
Tinkerforge GmbH
GET /list 200 219ms - 16
Arduino (www.arduino.cc)
GET /favicon.ico 404 4ms 

しかし、私がAPIを呼び出すとhttp://localhost:3000/list

Tinkerforge GnbHのみが表示され、Arduinoは表示されません。

ここに足りないものはありますか?

リストを配列などで保存する必要がありますか?

どんな助けでも本当にありがたいです。

よろしくお願いします。そしてところで、私はnode.jsとjavascriptの両方でちょっと初心者です。

4

1 に答える 1

2

ここでの問題は.send、 は とは異なり.write、一度しか呼び出せないことです。呼び出されると、Express はデータを分析し、正しいヘッダー (res.writeHead) を検出してからソケットに書き込み (res.write)、最後に接続を閉じます (res.close)。

.write解決策は、すべてのデータを一度に使用または送信することです。

.write の使用

app.get('/list', function(req, res) {
    serialport.list(function (err, ports) {
        ports.forEach(function(port) {
            var temp = port.manufacturer;
            res.write(temp);
        });
        res.send();
    });
});

.send の使用

app.get('/list', function(req, res) {
    serialport.list(function (err, ports) {
        var manufacturers = [];
        ports.forEach(function (port) {
            manufacturers.push(port.manufacturer);
        });
        res.send(manufacturers.join(" "));
    });
});

JSON は非常に扱いやすいので、おそらく のJSON.stringify(manufacturers)代わりに のようなものを使用するでしょう。.join

于 2013-01-02T15:12:19.367 に答える