Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何执行或有SQL查询,将结果打包为JSON,并发送回客户端?_Javascript_Node.js_Sqlite - Fatal编程技术网

Javascript 如何执行或有SQL查询,将结果打包为JSON,并发送回客户端?

Javascript 如何执行或有SQL查询,将结果打包为JSON,并发送回客户端?,javascript,node.js,sqlite,Javascript,Node.js,Sqlite,我在前端使用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!'); }); 我在表中插入

我在前端使用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);
});
在服务器端,我编写了以下代码:

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文件,然后再发送到页面

我的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”,而是发送消息,您的客户机将期望收到消息

切勿对ajax请求使用
setInterval()
。在ajax请求的
complete
回调中递归使用
setTimeout()