模型对象构造函数中的节点mysql查询
node-mysql query in model object constructor
我是javascript中的beginer。我尝试编写一个与Express和node-mysql一起使用的模型。它定义了类Place
当我创建一个对象实例:var p = new Place(10);
时,它应该初始化对象并填充变量。但是初始化数据存储在数据库中,并且查询是异步的,所以我认为对象是首先创建的,我不知道从数据库返回的数据会发生什么,也不知道如何正确初始化对象实例变量。
var db = app.db; // app is set as GLOBAL
// constructor
var Place = function(place_id) {
this.getPlaceById.call(place_id, function(err, result){
if (err) throw err;
this.id = result.id;
this.title = result.title;
this.city = result.city;
this.address = result.address;
});
}
Place.prototype.getPlaceById = function (place_id, callback) {
db.query(
'call getPlaceById(?);', /* call stored procedure */
[ place_id ],
function(err, results, fields) {
if(err) {
callback(err);
} else {
callback(null, results[0][0]);
}
}
);
}
module.exports = Place;
结果我得到了一个奇怪的错误:
function(place_id) {
...
} has no method 'replace'
at Object.SqlString.escape (.../node_modules/mysql/lib/protocol/SqlString.js:40:13)
at .../node_modules/mysql/lib/protocol/SqlString.js:72:22
at String.replace (native)
如果我留下空的构造函数,只调用:
p.getPlaceById(10, function(err,r) {
console.log(r)
});
它工作时没有错误,并返回正确的数据。
我找到了解决方案:
var Place = function(place_id, fn) {
var self = this;
Place.prototype.getPlaceById.call(this, place_id, function(err, result){
if (err) {
fn.call(self, err)
}
else {
self.id = result.id;
self.title = result.title;
self.city = result.city;
self.address = result.address;
fn.call(self);
}
});
}
并创建一个对象实例以便:
var p = new Place(place_id,function(err,result){
if (err)
console.log(err)
else
console.log(p);
});
相关文章:
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- 使用 Node-MYSQL 检索 MYSQl 数据库中最新的 X 个条目量?节点.js
- 节点&MySQL:Can't端连接->异步混淆
- 模型对象构造函数中的节点mysql查询
- 节点 MYSQL 如何在自己的对象中获取连接的表
- 节点 mysql 插入当前日期
- 如何存储我的节点 mysql 密码而不是纯文本
- 节点 - MySQL 查询,需要几分钟时间,在几分钟后重复自己,然后完成原始查询
- 第二个请求的节点mysql连接错误
- 动态变量与节点mysql'其中'陈述
- 节点mysql可以'似乎没有联系
- 如何将作用域传递给节点mysql中的回调
- 在高地流中执行节点mysql查询
- 流星节点:mysql自定义查询
- 节点MySQL et触发器
- 将json类数据转换为字符串,节点mysql
- 节点MySQL:可变查询事务
- 节点mysql缓慢插入多个查询
- Javascript范围.如何从回调函数中检索信息?节点mysql
- 节点MySQL查询语法错误