我刚刚开始学习nodejs,下面是我的代码...
Q1。我是否使用insertUserPendingBase()
处理错误消息的正确方法?
我检查返回消息是否等于success
。如果是这样,那么在此示例中then
可以做什么?
Q2。我在执行查询时使用pg
,是否需要做任何事情来防止SQL注入(inject)?我在文档中看到没有必要,但是我不确定。
任何可以改善我的代码的建议都将受到欢迎
路线
var express = require('express');
var router = express.Router();
var co = require('co');
// .. post
var insertUserPendingBase = function(token) {
return new Promise(function (fulfill, reject){
var query = "INSERT INTO user_pending_base (user_pending_email,user_pending_password,token_timestamp,token) VALUES ('" + user_email + "','" + user_password + "', CURRENT_TIMESTAMP,'" + token + "')";
dbClient.query(query, function(err, result) {
if (err) {
reject(err);
} else {
fulfill('success');
}
});
});
// .then(function(value) {
// console.log(value);
// throw "error message";
// }).catch(function(e) {
// console.log(e);
// });
}
co(function *() {
// ...
var insertUserPendingBaseResult = yield insertUserPendingBase(generateTokenResult);
console.log('insertUserPendingBaseResult:'+insertUserPendingBaseResult);
if (insertUserPendingBaseResult == 'success') { // handle error like this ??
}
res.render('Account/Register/Index', {
partials: {
Content: 'Account/Register/Content',
}
});
}).catch(onerror);
function onerror(err) {
console.error(err.stack);
}
更新
如果我更改
fulfill(result)
而不是fulfill('success')
,我将获得下面的对象,但是没有关于失败或成功的消息{ command: 'INSERT',
rowCount: 1,
oid: 0,
rows: [],
fields: [],
_parsers: [],
RowCtor: null,
rowAsArray: false,
_getTypeParser: [Function] }
更新2
我找到一种在
try
中使用catch
和co(function *()
的方法,如下所示,但是我不确定这是制作干净代码的最佳方法吗?co(function *() {
...
try {
var insertUserPendingBaseResult = yield insertUserPendingBase(generateTokenResult);
// if success ...
} catch (err) {
// if fail
console.log(err);
}
最佳答案
无法评论SQL注入(inject),但是fulfill('success')
必须是fulfill(result)
。
要处理promise
的成功和失败,您应该使用then
和catch
,不需要生成器:
insertUserPendingBase.then(function(result) { /* handle result here */ })
.catch(function(ex) { /* handle exception here */ })