我刚刚开始学习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中使用catchco(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的成功和失败,您应该使用thencatch,不需要生成器:

insertUserPendingBase.then(function(result) { /* handle result here */ })
                     .catch(function(ex) { /* handle exception here */ })

09-25 13:03