Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 107,907

HOME > Client Script Forum > ช่วยด้วยจ้าคือผมจะส่งค่าในฟังค์ชัน callback ยังไงดีใน Node JS



 

ช่วยด้วยจ้าคือผมจะส่งค่าในฟังค์ชัน callback ยังไงดีใน Node JS

 



Topic : 132063



โพสกระทู้ ( 256 )
บทความ ( 0 )



สถานะออฟไลน์




คือผมต้องการแยกตัว 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
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2018-09-16 12:09:06 By : bank1324 View : 1156 Reply : 2
 

 

No. 1



โพสกระทู้ ( 7,977 )
บทความ ( 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
 


 

No. 2



โพสกระทู้ ( 256 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณมากๆสำหรับแนวคิดนะ ผมลองทำแล้วเอามาแบ่งปัน ผมว่าใครต่อดาต้าเบส 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
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ช่วยด้วยจ้าคือผมจะส่งค่าในฟังค์ชัน callback ยังไงดีใน Node JS
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2019 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่