node.js - promise nodejs + postgresql 中的错误句柄

标签 node.js postgresql express error-handling promise

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

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

关于node.js - promise nodejs + postgresql 中的错误句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31765370/

相关文章:

node.js - 调用 ExpressJS REST 路由时出现奇怪的行为

javascript - 使用 node.js 预先计算 sigma.js 中图形的位置(使用 ForceAtlas2)

PostgreSQL 区间减法

python - Django - 处理多个不同级别的嵌套模型

sql - "THEN "处或附近的 Postgresql 语法错误

node.js - Node 表达请求

node.js - 使用nodejs 'cassandra-driver'准备查询和IN查询

javascript - 如何从 Node.js 自定义服务器向客户端发送响应

node.js - Csurf 无效的 csrf token Express/nodejs

javascript - 无法使用 NodeJS 登录生成 jwt token