Javascript 基于mysql的节点模块不工作
我有一个基于节点的应用程序,可以查看数据库中的数据。因为数据库相当大,有几个表,所以我正在编写一个模块来帮助模块化任务。问题是我无法让主代码返回数据库查找中的所有数据,因为我认为程序在执行之前就退出了。如何使节点模块正常工作?我的目的是让DB helper函数驻留在Javascript 基于mysql的节点模块不工作,javascript,mysql,node.js,Javascript,Mysql,Node.js,我有一个基于节点的应用程序,可以查看数据库中的数据。因为数据库相当大,有几个表,所以我正在编写一个模块来帮助模块化任务。问题是我无法让主代码返回数据库查找中的所有数据,因为我认为程序在执行之前就退出了。如何使节点模块正常工作?我的目的是让DB helper函数驻留在somethingheloper.js模块中。我的主代码silly.js如下所示: // silly.js var sh = require('./SomethingHelpers.js'); helper = new sh();
somethingheloper.js
模块中。我的主代码silly.js
如下所示:
// silly.js
var sh = require('./SomethingHelpers.js');
helper = new sh();
helper.then(function(res) {
var promise = helper.getAllForUsername('sonny');
promise.then(function(res) {
console.log('worked', res);
});
promise.catch(function(err) {
console.log('err: ', err);
});
});
helper.catch(function(err) {
console('Could not create object: ', err);
});
var mysql = require("mysql");
function SomethingHelpers() {
return new Promise(function(resolve, reject) {
this.connectionPool = mysql.createPool({
connectionLimit: 100,
host: 'server.somewhere.com',
user: "username",
password: "somepass",
database: "sillyDB",
debug: false
});
});
}
SomethingHelpers.prototype.getAllSomethingForUsername = function(username) {
var result = [];
return new Promise(function(resolve, reject) {
this.connectionPool.getConnection(function(err, connection) {
if (err) {
console.log('Error connecting to the silly database.');
return;
} else {
console.log('Connection established to the silly database. Super-Duper!');
return connection.query('SELECT something FROM somethingTable where username=\"' + username + '\"',
function(err, rows, field) {
connection.release();
if (!err) {
//console.log (rows.something);
rows.forEach(function(item) {
var allSomething = JSON.parse(item.something);
console.log(allSomething.length);
result.push(allSomething);
for (var i = 0; i < allSomething.length; i++) {
console.log(allSomething[i].handle);
}
console.log('\n\n');
});
console.log('Done');
return result;
} else {
console.log('Eeeeeeeek!');
//console.log (result);
return result;
}
});
}
});
});
} // End of getAllSomething ()
module.exports = SomethingHelpers;
somethinghelopers.js
如下所示:
// silly.js
var sh = require('./SomethingHelpers.js');
helper = new sh();
helper.then(function(res) {
var promise = helper.getAllForUsername('sonny');
promise.then(function(res) {
console.log('worked', res);
});
promise.catch(function(err) {
console.log('err: ', err);
});
});
helper.catch(function(err) {
console('Could not create object: ', err);
});
var mysql = require("mysql");
function SomethingHelpers() {
return new Promise(function(resolve, reject) {
this.connectionPool = mysql.createPool({
connectionLimit: 100,
host: 'server.somewhere.com',
user: "username",
password: "somepass",
database: "sillyDB",
debug: false
});
});
}
SomethingHelpers.prototype.getAllSomethingForUsername = function(username) {
var result = [];
return new Promise(function(resolve, reject) {
this.connectionPool.getConnection(function(err, connection) {
if (err) {
console.log('Error connecting to the silly database.');
return;
} else {
console.log('Connection established to the silly database. Super-Duper!');
return connection.query('SELECT something FROM somethingTable where username=\"' + username + '\"',
function(err, rows, field) {
connection.release();
if (!err) {
//console.log (rows.something);
rows.forEach(function(item) {
var allSomething = JSON.parse(item.something);
console.log(allSomething.length);
result.push(allSomething);
for (var i = 0; i < allSomething.length; i++) {
console.log(allSomething[i].handle);
}
console.log('\n\n');
});
console.log('Done');
return result;
} else {
console.log('Eeeeeeeek!');
//console.log (result);
return result;
}
});
}
});
});
} // End of getAllSomething ()
module.exports = SomethingHelpers;
var mysql=require(“mysql”);
函数somethinghelopers(){
返回新承诺(功能(解决、拒绝){
this.connectionPool=mysql.createPool({
连接限制:100,
主机:“server.somewhere.com”,
用户:“用户名”,
密码:“somepass”,
数据库:“sillyDB”,
调试:false
});
});
}
SomethingHelpers.prototype.getAllSomethingForUsername=函数(用户名){
var结果=[];
返回新承诺(功能(解决、拒绝){
this.connectionPool.getConnection(函数(err,connection){
如果(错误){
log('连接到数据库时出错');
返回;
}否则{
log('已建立到数据库的连接.Super-Duper!');
return connection.query('从其中username=\'+username+'\''的somethingTable中选择某物,
函数(错误、行、字段){
连接。释放();
如果(!err){
//console.log(rows.something);
rows.forEach(函数(项){
var allSomething=JSON.parse(item.something);
console.log(allSomething.length);
结果:推(所有的东西);
for(var i=0;i
我找到了自己问题的答案。我是这样解决的。首先,somethinghelopers.js
:
//SomethingHelpers.js
var mysql = require('promise-mysql');
function SomethingHelpers () {
this.pool = mysql.createPool({
connectionLimit: 100,
host: 'server.somewhere.com',
user: "username",
password: "somepass",
database: "sillyDB",
debug: false
});
}
SomethingHelpers.prototype.getAllSomethingsForThisUsername = function (username) {
let pool = this.pool;
return new Promise(function (resolve, reject) {
pool.getConnection ().then(function(connection) {
connection.query('SELECT something FROM somethingsTable where username=\"'+
username+'\"').
then (function (rows) {
resolve (getAllSomethings (rows));
}).catch (function (error) {
console.log ('Error: ', error);
});
});
});
}
function getAllSomethings (rows)
{
var result = [];
rows.forEach (function (item) {
var allSomethings = JSON.parse(item.something);
result.push (allSomethings);
});
return result;
}
module.exports = SomethingHelpers;
凭借承诺的荣耀
,可以享受助手模块的赏金:
//silly.js
var hh = require ('./SomethingHelpers');
helper = new hh ();
thePromiseOfSomething = helper.getAllSomethingsForThisUsername ('sonny');
thePromiseOfSomething.then(function (rows) {
console.log (rows);
});
从而使我从异步思维(J/K)的暴政中解脱出来。您的
SomethingHelpers
构造函数返回了一个承诺,但没有任何东西能解决它。感谢您的快速响应。我如何解决这个承诺?对不起,我是JS noob。不清楚这个承诺的意义是什么。承诺代码将resolve()
和reject()
函数传递给你的函数,以便你的代码在工作完成时调用。好的,有人能告诉我,如果没有Promise
,我怎么能实现我所需要的吗?