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 回答