不能使用带有Node.js和Postgres的参数化SQL语句

自从昨晚以来,我一直在用这个东西敲打我的头。 当我将参数添加到SQL,它不起作用。

var findOne = function(username, cb) { pg.connect(pgURL, function(err, client, done) { var query = client.query('SELECT * FROM users WHERE username = $1', [username]); done(); query.on('row', function(row) { cb(err, row); }); }); }; 

但是,如果我做一个没有参数化的SQL语句,它工作得很好。

 var query = client.query("SELECT * FROM users WHERE username = 'foobar'"); 

另外,在done()之后执行console.log(query)会产生以下结果:

 13:48:00 web.1 | { domain: null, 13:48:00 web.1 | _events: null, 13:48:00 web.1 | _maxListeners: 10, 13:48:00 web.1 | name: undefined, 13:48:00 web.1 | text: 'SELECT * FROM users WHERE username = $1', 13:48:00 web.1 | values: [ '{"username":"foobar"}' ], 13:48:00 web.1 | callback: undefined, 13:48:00 web.1 | _result: 13:48:00 web.1 | { command: null, 13:48:00 web.1 | rowCount: null, 13:48:00 web.1 | oid: null, 13:48:00 web.1 | rows: [], 13:48:00 web.1 | fields: [], 13:48:00 web.1 | _parsers: [], 13:48:00 web.1 | RowCtor: null }, 13:48:00 web.1 | _addedFields: false, 13:48:00 web.1 | _canceledDueToError: false } 

我在这里做错了什么?

您的用户名variables似乎是一个带有密钥用户名和值foobar的JavaScript对象。 尝试使用username.username来引用该值。

或者,我强烈推荐位于页顶的ORM Sequelize。 看看这里: http : //sequelizejs.com/documentation#usage-raw-queries

你确定用户名是一个string? 尝试做username.toString()

Interesting Posts