1

フロントエンドでnode.js、sqlite3(anyDBを使用)、およびjavascriptを使用しています。

私はテーブルを作りました:

conn.query('CREATE TABLE messages (id INTEGER PRIMARY KEY AUTOINCREMENT, room TEXT, nickname TEXT, body TEXT, time INTEGER)').on('end', function(){
        console.log('Made table!');
    });

私はテーブルに何かを挿入しました:

conn.query('INSERT INTO messages VALUES ($1, $2, $3, $4, $5)', [null, request.params.roomName, request.body.nickname, request.body.message, null]).on('error', console.error);

クライアント側の js で、次のコードを書きました。

window.addEventListener('load', function(){
     var intervalID = setInterval(updateMessages, 4000);
}, false);

function updateMessages() {
    var req = new XMLHttpRequest();
    req.open('GET', '/' + roomName + '/messages.json', true);
    req.send();
    //GET ACCESS TO RESPONSE IN ORDER TO ADD IT TO THE PAGE
}

サーバー側では、次のコードを書きました。

app.get('/:roomName/messages.json', function(request, response){
    var roomName = request.params.roomName;
    var messages = conn.query("SELECT ALL body FROM messages where room="+roomName+";");
    response.send(messages);
});

SQL ステートメントは正しいように見えますか? ルームがまだデータベースにない場合にサーバーがクラッシュしないように、select ステートメントをどのように記述すればよいですか?

最後に、応答をパッケージ化してパブリック js ファイルに送り返し、次にページに送り返すにはどうすればよいですか?

4

1 に答える 1

0

SQL ステートメントは正しいように見えますか?

はい。

ルームがまだデータベースにない場合にサーバーがクラッシュしないように、select ステートメントをどのように記述すればよいですか?

エラー処理を行う必要があります。次のようなコールバックを使用してみてください。

var sql = "SELECT ALL body FROM messages where room="+roomName+";";
conn.query(sql, function(error, result) { 
  if(error) {
    console.log("There was an error.");
  }
  response.send(result);
});

最後に、応答をパッケージ化してパブリック js ファイルに送り返し、次にページに送り返すにはどうすればよいですか?

SQL クエリから返されたオブジェクトを送信しています。クライアントはそのオブジェクトを期待する必要があります。クライアントから AJAX リクエストを送受信する方法を検討することをお勧めします。「パブリック js を更新する」のではなく、メッセージを送信すると、クライアントはそれを受信することを期待します。

于 2013-03-15T23:07:11.947 に答える