 |
ช่วยด้วยจ้าคือผมจะส่งค่าในฟังค์ชัน callback ยังไงดีใน Node JS |
|
 |
|
|
 |
 |
|
คือผมต้องการแยกตัว select ออกจาก connect ดาต้าเบส (ผมใช้ mongo db) ติดปัญหาคือมันไม่รู้จักตัวแปร
ความงงคือตัวแปรนั้นดันอยู่ใน callback ฟังก์ชัน จะ return ก็ไม่ได้
สรุปคือจะทำยังไงให้สามารถส่งค่า dbo ไปที่ฟังก์ชัน select_cl ได้
ไหว้ละจ้า ขอบคุณครับ
ส่วน Module --- function.js
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
module.exports = {
connect_db: function() {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
// ตรงนี้คือตัวปัญหา งงว่าจะส่งตัวแปร dbo ไปยังฟังก์ชัน select_cl ได้ยังไง
// ไม่เคยเจอแนวนี้คืนค่าตัวแปรใน callback
// return dbo; สรุปงง
dbo = db.db("dbtest");
});
},
select_cl: function(){
// เพราะตรงนี้ไม่รู้จัก ตัวแปร dbo
dbo.collection("admin").findOne({}, function(err, result) {
console.log(result.title);
});
}
};
ส่วนเรียก Module --- server.js
// Library All
var express = require('express');
var app = express();
var mongo = require('mongodb');
app.set('view engine','ejs');
app.use(express.static(__dirname));
// Function All
var func = require("./function.js");
app.get('/index', function (req, res) {
// ส่วนตอนเรียก ------------------------------------- คือปัญหา
func.connect_db();
func.select_cl();
res.render('index.ejs');
});
var server = app.listen(1000, function () {
var host = server.address().address;
var port = server.address().port;
console.log("Example app listening at http://%s:%s", host, port);
});
Tag : Mobile
|
ประวัติการแก้ไข 2018-09-16 12:12:19 2018-09-16 12:13:56 2018-09-16 12:14:54 2018-09-16 12:15:18 2018-09-16 12:17:00 2018-09-16 12:30:13 2018-09-16 12:30:42 2018-09-16 12:32:03 2018-09-16 12:33:49
|
 |
 |
 |
 |
Date :
2018-09-16 12:09:06 |
By :
bank1324 |
View :
2688 |
Reply :
2 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (JavaScript)
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
module.exports = {
connect_db: function(callback) { // ส่ง callback กลับไป
MongoClient.connect(url, function(err, db) {
if (err) throw err;
callback( db.db("dbtest") );
});
},
select_cl: function(dbo){ // ผ่านค่าตัวแปรมาตรงๆ
dbo.collection("admin").findOne({}, function(err, result) {
console.log(result.title);
});
}
};
func.connect_db( (rs)=>{
func.select_cl(rs);
res.render('index.ejs');
}); // ใส่ callback เรียกอีกชั้น
ปล. หรือประกาศตัวแปร dbo แบบ global ไว้ข้างนอก ซึ่งมันจะเปลือง mem แต่งายดี
|
ประวัติการแก้ไข 2018-09-16 14:30:37 2018-09-16 14:40:11 2018-09-16 14:41:34 2018-09-16 14:43:34 2018-09-16 14:44:34 2018-09-16 14:47:41
 |
 |
 |
 |
Date :
2018-09-16 14:29:07 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณมากๆสำหรับแนวคิดนะ ผมลองทำแล้วเอามาแบ่งปัน ผมว่าใครต่อดาต้าเบส mongodb ต้องเจอปัญหาแบบผมแน่ ถ้าต้องการแยกไฟล์ select ออกจาก connect เพราะตัวอย่างตามเว็บมันมักอยู่รวมกัน
หลักการคือ
1 เราต้องเรียก connect ดาต้าเบส นอก route ก่อนเลย
2 ไปทำการเก็บค่าด้าต้าเบสไว้ในตัวแปร database
3 สร้างฟังชัน getdb() return database ค่ากลับมา
4 mongo.getdb() ไปเรียกดาต้าเบสที่เราเลือกไว้
server.js
// Library All
var express = require('express');
var app = express();
app.set('view engine','ejs');
app.use(express.static(__dirname));
// Call Mongo DB
var mongo = require("./mongo.js");
mongo.connect();
app.get('/', function (req, res) {
mongo.getdb().collection("info").find({}).toArray(function(err, result) {
if (err) throw err;
console.log(result);
});
res.render('index.ejs');
});
var server = app.listen(1000, function () {
var host = server.address().address;
var port = server.address().port;
console.log("Example app listening at http://%s:%s", host, port);
});
mongo.js
//Config DB
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
var db_name = "test";
// System DB
var odb = "";
var database = "";
module.exports = {
connect: function() {
MongoClient.connect(url,{ useNewUrlParser: true }, function(err, db) {
if (err) throw err;
odb = db;
database = db.db(db_name);
});
},
disconnect: function() {
odb.close();
},
getdb: function() {
return database;
}
};
|
ประวัติการแก้ไข 2018-09-18 12:43:00
 |
 |
 |
 |
Date :
2018-09-17 12:46:32 |
By :
bank1324 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|