NodeJS - 模块化SQLite3

时间:2014-12-30 21:20:58

标签: node.js asynchronous sqlite

我喜欢在可能的情况下拆分我的代码 - 并且在路由中使用SQL会让我感到畏缩。

节点JS对我来说是新手,我现在正在学习它,但我遇到了以下问题(页面只是挂起而且没有提供任何服务)。

以我目前的知识水平对我有意义 - 但我想有更好的方法可以做到这一点。

感谢您抽出宝贵时间阅读本文,非常感谢您的帮助。


路线

var express   = require('express');
var router    = express.Router();
var db        = require('../lib/db.js');

var model     = require('../models/contacts.js');

/* GET contacts. */
router.get('/', function(req, res) {

  // Get data from model - RETURN THE ROWSET HERE
  model.get_names(db, function(rowset) {

    res.render('contacts', { 
      title: 'Contacts | Rhubarb',
      nav_active: "contacts",
    }, function(err, output) {
      res.status(200).send(rowset);  
    }); // res.render

  }); // model.get_names

}); // router

module.exports = router;

模型

module.exports.get_names = function(db) {

  var sql = " SELECT attr_name " +
            "      , attr_value " +  
            "   FROM contacts  a " +
            "      , contact_attributes b " +
            "  WHERE a.contact_id = b.contact_id " +
            "    AND (attr_name = 'forename' OR attr_name = 'surname')";


   db.all(sql, function(err, rowset) {

     if (err) throw err;
     return rowset;

   }); // db.all

}  // get_names

1 个答案:

答案 0 :(得分:0)

通过向函数添加实际回调来对其进行排序... 叹息 ...

module.exports.get_names = function(db, callback) {

  var sql = " SELECT attr_name " +
            "      , attr_value " +  
            "   FROM contacts  a " +
            "      , contact_attributes b " +
            "  WHERE a.contact_id = b.contact_id " +
            "    AND (attr_name = 'forename' OR attr_name = 'surname')";


  return db.all(sql, function(err, rowset) {
    if (err) throw err;

    return callback(rowset);

  });

}