需要从数据库nodejs

时间:2018-05-04 10:47:51

标签: javascript node.js

我有一个用Java编写的服务器,为js运行Rhino, 我决定将此服务器重写为nodejs ... 我需要从DB同步获取数据:

function executeRowsetParam(sql, p){
return DB.raw(sql,p)// returns object
}

所以我可以像:

一样使用它
var userName = executeRowsetParam('SELECT user_name FROM users where user_id = ?', ["123"]);

if(userName.getRow(0).getValue("user_name ") == "admin"){
//do sth
}

只是一个简单的例子,有时我需要从数据库数据中选择,我必须在1000行代码中使用,所以代码如下:

executeRowsetParam('SELECT user_name FROM users where user_id = ?', ["123"]).then((r)=>{
if(r.getRow(0).getValue("user_name ") == "admin"){
//do sth
}
})

不会那么好用...... 我也有这样的代码:

IfExists(SQL,p){
if(DB.raw("selecect top 1 1 from" + sql,p) == 1){
return true
}else{return false}

并将其重写为:

DB.raw("selecect top 1 1 from" + sql,p).then((r)=>{
if(r == 1){//do sth}else{//do else} 
})

对我不起作用 所以有一些npm包我可以用来从db synchron中选择,这将是我的一天。

像这样的代码会好吗?

    var Start = async () => {
var Server = require("./core/server/Server");
console.log('hi!');
console.dir("there is nothing to look at at the momment");
var db = require("./core/db/DB");
global.DB = new db()

 function foo() {
    return DB.executeSQL("asdasd", [123, 123])
}
console.dir(await foo());
console.dir('asd');
global.DEBUG = true;
global.NEW_GUID = require('uuid/v4');

var server = new Server()
server.start();
}
Start();

是否足以让我在服务器内的每个实例中使用await,或者如果我使用await,我是否让每个函数都异步?

1 个答案:

答案 0 :(得分:0)

找到并测试deasync效果很好!

var deasync = require('deasync');

module.exports = function DB(){
  var knex = require('knex')(require("./../../config").DB);

  this.executeRowsetParam = (sql, param) => {
    let done = false;
    knex.raw(sql, param).then((r => {
      done = r;
    })).catch((e => {
      throw "Error in query "+ e
    }))
    deasync.loopWhile(function () { return !done; });
    return done
  }
}