如何将SQLite索引放入Nodejs的变量中?

时间:2016-01-27 01:24:56

标签: javascript sql node.js sqlite express

我正在使用express和nodejs为一个家庭作业问题做一个聊天室,我把这些消息保存在一个sql .db文件中。索引具有自动编写的整数主键,还有3列文本信息:room,nickname和body。这是我尝试和调试的一些代码:

app.post('/messages', function(request, response){
if(request.body.username == ''){
    var username = "Anonymous";
}

else {
var username = request.body.username;
}
var msg = request.body.msg;
conn.query('INSERT INTO messages(id, room, nickname, body) VALUES ($1, $2, $3, $4);', [n, room1, username, msg]); //room, name, text

var out = conn.query('SELECT body FROM messages WHERE id = 2');
console.log(out);

});

这会输出表格的一堆设置

SQLite3Query {
  _readableState:
   ReadableState {
     objectMode: true,
     highWaterMark: 16,
     buffer: [],
     length: 0,
     pipes: null,
     pipesCount: 0,
     flowing: null,
     ended: false,
     endEmitted: false,
     reading: false,
     sync: true,
     needReadable: false,
     emittedReadable: false,
     readableListening: false,
     defaultEncoding: 'utf8',
     ranOut: false,
     awaitDrain: 0,
     readingMore: false,
     decoder: null,
     encoding: null },
  readable: true,
  domain: null,
  _events: {},
  _eventsCount: 0,
  _maxListeners: undefined,
  text: 'SELECT body FROM messages WHERE id = 2',
  _fields: null,
  _result: { rows: [] },
  _errored: false,
  values: [],
  callback: undefined }

最后一部分" WHERE id = 2"我有点困惑,因为如果我把正常的''在2左右它打破了。

使用其他软件,我可以看到数据库中确实有信息。最后我想让聊天室打印出从适当的房间到HTML的所有索引,但这个障碍存在。

1 个答案:

答案 0 :(得分:1)

API Colonel_Thirty_Two指的是:https://github.com/mapbox/node-sqlite3/wiki/API

部分:Database#all(sql, [param, ...], [callback])正是您要找的。通过查看函数签名,我们看到我们需要指定一个SQL查询,后跟两个可选参数,一个是回调函数。

此外,在描述中我们看到回调需要采用以下形式:function(err, rows)。其中err是一个为null的对象,除非出现错误。 rows是你的实际行。

把它们放在一起我们得到:

var query = 'SELECT body FROM messages WHERE id = 2';
conn.all(query, function(err, rows) {
  console.log(rows);
}

使用param可选参数我们可以:

var query = 'SELECT body FROM messages WHERE id = ?';
conn.all(query, 2, function(err, rows) {
  console.log(rows);
} 

如果键是整数,则WHERE id = 2应该可以正常工作。将“”置于2左右将失败,因为SQL中未使用双引号。如果你的主键是一个字符串,你可以在它周围加上单引号。

var query = 'SELECT body FROM messages WHERE id = \'2\'';
conn.all(query, function(err, rows) {
  console.log(rows);
} 

最后还有一个很好的教程: https://codeforgeek.com/2014/07/node-sqlite-tutorial/