我正在尝试学习如何为nodejs编写自己的模块,特别是实现各种对象,然后我可以在整个应用程序中使用它。
我想使用这样的结果:
//assuming i have database:
Person_table(ID int A_I, NAME varchar, AGE int)
//code:
var p = new Person("John", 22);
p.writeToDatabase();
//the object is now written in database
我尝试了以下内容,但由于某些原因,我无法理解它不起作用。 我已经声明了三个文件:db.js,person.js,app.js
db.js
var mysql = require('mysql');
var conn = mysql.createPool({
host : 'localhost',
database: 'db_name',
user: 'user_name',
password : 'pass',
multipleStatement: true,
connectionLimit : 10
});
conn.getConnection(function(err){
if(err) throw err;
});
module.exports = conn;
person.js
var db = require('./db.js');
function Person(n, a) {
this.name = n;
this.age = a;
}
Person.prototype.writeToDatabase = function (callback) {
db.query("INSERT INTO Person_table(NAME, AGE) VALUES(?,?)", [this.name, this.age], function (err, rows) {
if (err) return callback(err);
else return callback(null, rows);
});
}
module.exports = Person;
app.js
var Person = require('./person.js')
var p = new Person("John", 22);
p.writeToDatabase(function(err, rows){
if(err) console.log(err);
else console.log("written to DB");
});
我很感激有关代码错误的帮助。 作为奖励,我想问一下关于模块导出和对象原型主题的任何好文献,以创建分层nodejs应用程序。
答案 0 :(得分:0)
我将给出的第一条建议如下:您可以在person.js
中使用这样的回调:
Person.prototype.writeToDatabase = function (callback) {
db.query("INSERT INTO Person_table(NAME, AGE) VALUES(?,?)",
[this.name, this.age],
callback // Since you do nothing with `err` or `rows`
);
}
为什么?因为您处理了app.js
文件中的回调:)。
接下来,我认为它不起作用,因为你不等待你的函数conn.getConnection
结束,而且你不使用这个函数的返回!查看文档here。
您应该重新组织代码,如:
<强> db.js 强>
var mysql = require('mysql');
module.exports = mysql.createPool({
host : 'localhost',
database: 'db_name',
user: 'user_name',
password : 'pass',
multipleStatement: true,
connectionLimit : 10
});
<强> person.js 强>
module.exports = function (connection) { // You need the connection to query your database.
function Person(n, a) {
this.name = n;
this.age = a;
}
Person.prototype.writeToDatabase = function (callback) {
// The connection is used here.
connection.query("INSERT INTO Person_table(NAME, AGE) VALUES(?,?)",
[this.name, this.age],
callback
);
}
return Person;
};
<强> app.js 强>
var db = require('./db');
db.getConnection(function (err, connection) { // Once you're connected to the database, you can start using your app.
var Person = require('./person')(connection); // Since we export a function with a parameter, we need to require the person.js like this.
var p = new Person("John", 22);
p.writeToDatabase(function(err, rows) {
if(err) console.log(err);
else console.log("written to DB");
});
});
如果我不清楚,你可以要求更多细节:)。如果我向您展示的模式不符合您的期望,您可以通过其他方式完成工作;)
答案 1 :(得分:0)
我弄明白了这个问题。我的例子很完美,我只有一个完全不相关的问题。
在我的短程序结束时,我有process.exit()
,以便我的应用程序在完成任务时结束。但是我没有考虑node.js的异步性质,所以我在写入数据库之前执行的process.exit()
已经完成,因此失败了。
无论如何,感谢您的帮助!