แอปพลิเคชันแชทแบบเรียลไทม์ที่สร้างโดยใช้ Node.js, Express, Mongoose, Socket.io, Passport และ Redis
ตรวจสอบการสาธิต
ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Node.js และ npm แล้ว
โคลนหรือดาวน์โหลดที่เก็บ
$ git clone https://github.com/OmarElGabry/chat.io.git
$ cd chat.io
ติดตั้งการพึ่งพา
$ npm install
แก้ไขไฟล์การกำหนดค่าใน app/config/config.json ด้วยข้อมูลประจำตัวของคุณ (ดูการกำหนดค่าการตั้งค่า)
ดาวน์โหลดและติดตั้ง Redis.
ใช้งานเซิร์ฟเวอร์ Redis (ในฐานะผู้ดูแลระบบ)
$ redis-server
เริ่มแอปพลิเคชัน
$ npm start
ตอนนี้แอปของคุณควรทำงานบน localhost:3000
ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Heroku Toolbelt แล้ว
สร้างแอปพลิเคชัน Heroku ใหม่ และพุชแอปพลิเคชันแชทของคุณไปยังพื้นที่เก็บข้อมูลระยะไกล Git
$ heroku create
$ git push heroku master
หรือ
ตอนนี้คุณต้องตั้งค่าตัวแปรการกำหนดค่าบน Heroku
{ dbURI, sessionSecret, facebookClientID, facebookClientSecret, twitterConsumerKey, twitterConsumerSecret }
(ดูการกำหนดค่าการตั้งค่า)ขั้นตอนสุดท้ายคือการเพิ่ม Redis เป็นส่วนเสริมบน Heroku
คุณต้องตั้งค่าบัญชีสำหรับการเรียกเก็บเงินแม้ว่าส่วนเสริมจะฟรีก็ตาม
เปิดแอปพลิเคชันแชทของคุณในเบราว์เซอร์
$ heroku open
การกำหนดค่าในการใช้งานจริงจะได้รับมอบหมายจากตัวแปรสภาพแวดล้อมบน Heroku ในขณะที่การกำหนดค่าการพัฒนาอยู่ภายในไฟล์ app/config/config.json
คุณต้องสร้างฐานข้อมูลบน MongoLab จากนั้นสร้างผู้ใช้ฐานข้อมูล รับ MongoDB URI
และกำหนดให้กับ dbURI
คุณต้องลงทะเบียนแอปพลิเคชันใหม่ทั้งบน Facebook และ Twitter เพื่อรับโทเค็นของคุณซึ่งผู้ใช้สามารถให้สิทธิ์การเข้าถึงแอปพลิเคชันของคุณได้ และเข้าสู่ระบบโดยใช้บัญชีโซเชียลของพวกเขา
App ID
ของคุณ App Secret
ตอนนี้คุณสามารถกำหนด App ID
ให้กับ facebookClientID
และ App Secret
ให้กับ facebookClientSecret
ได้
Consumer Key
Consumer Secret
ตอนนี้คุณสามารถกำหนด Consumer Key
ให้กับ twitterConsumerKey
และ Consumer Secret
ให้กับ twitterConsumerSecret
ได้
มันสามารถชี้กลับไปยังโลคัลโฮสต์ของคุณ http://localhost:3000/auth/facebook/callback
เมื่อปรับใช้กับ Heroku คุณจะมีลักษณะเช่นนี้ http://my-chat-app.herokuapp.com/auth/facebook/callback
เซสชันต้องการสตริงแบบสุ่มเพื่อให้แน่ใจว่ารหัสเซสชันในเบราว์เซอร์นั้นเป็นแบบสุ่ม สตริงสุ่มนั้นใช้เพื่อเข้ารหัสรหัสเซสชันในเบราว์เซอร์ เพราะเหตุใด เพื่อป้องกันการคาดเดารหัสเซสชัน
Mongoose ใช้เพื่อโต้ตอบกับ MongoDB ที่โฮสต์โดย MongoLab
มีสองสคีมา; ผู้ใช้และห้อง
ผู้ใช้แต่ละคนมีชื่อผู้ใช้ รหัสผ่าน รหัสโซเชียล และรูปภาพ หากผู้ใช้เข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่าน รหัสโซเชียลจะต้องเป็นโมฆะ และหากเข้าสู่ระบบผ่านบัญชีโซเชียล รหัสผ่านจะเป็นโมฆะ
แต่ละห้องมีชื่อและการเชื่อมต่อที่หลากหลาย แต่ละรายการในอาร์เรย์การเชื่อมต่อแสดงถึงผู้ใช้ที่เชื่อมต่อผ่านซ็อกเก็ตเฉพาะ วัตถุที่ประกอบด้วย {userId + socketId} ทั้งสองอย่างรวมกันมีเอกลักษณ์เฉพาะตัว
แต่ละโมเดลจะล้อมอ็อบเจ็กต์ Mongoose Model แทนที่ และจัดเตรียมวิธีการบางอย่าง มีสองรุ่น; ผู้ใช้และห้อง
เซสชันในแอปพลิเคชัน Express ได้รับการจัดการได้ดีที่สุดโดยใช้แพ็คเกจเซสชันด่วน ข้อมูลเซสชันจะถูกจัดเก็บไว้ในคอมพิวเตอร์ของคุณ ในขณะที่จัดเก็บไว้ในฐานข้อมูลในสภาพแวดล้อมการใช้งานจริง ข้อมูลเซสชันจะถูกลบเมื่อออกจากระบบ
ผู้ใช้สามารถเข้าสู่ระบบโดยใช้ชื่อผู้ใช้และรหัสผ่านหรือเข้าสู่ระบบผ่านบัญชีโซเชียล การรับรองความถูกต้องของผู้ใช้ทำได้โดยใช้ Passport Passport มีเอกสารที่ครอบคลุมและเป็นขั้นตอนเกี่ยวกับวิธีการใช้การรับรองความถูกต้องแต่ละวิธี
การเปิดการเชื่อมต่อที่ใช้งานระหว่างไคลเอนต์และเซิร์ฟเวอร์เพื่อให้ไคลเอนต์สามารถส่งและรับข้อมูลได้ ช่วยให้สามารถสื่อสารแบบเรียลไทม์โดยใช้ซ็อกเก็ต TCP สิ่งนี้เกิดขึ้นได้โดย Socket.io
ไคลเอนต์เริ่มต้นด้วยการเชื่อมต่อกับเซิร์ฟเวอร์ผ่านซ็อกเก็ต (อาจกำหนดให้กับเนมสเปซเฉพาะด้วย) เมื่อการเชื่อมต่อสำเร็จ ไคลเอนต์และเซิร์ฟเวอร์สามารถปล่อยและฟังเหตุการณ์ได้
มีสองเนมสเปซที่ใช้; /rooms
และ /chatroom
และจะไม่ดำเนินไปโดยไม่บอก คุณต้องตรวจสอบแอปพลิเคชันของคุณ Winston สามารถบันทึกและตรวจจับ Uncaught Exceptions ได้ บันทึกทั้งหมดจะแสดงในคอนโซล และบันทึกในไฟล์ debug.log
บน Heroku คุณสามารถตรวจสอบบันทึกได้โดยคลิกที่ เพิ่มเติม -> ดูบันทึก ที่ด้านซ้ายบนของแดชบอร์ดแอปพลิเคชันของคุณ
ฉันเขียนสคริปต์นี้ในเวลาว่างระหว่างเรียน หากเห็นว่ามีประโยชน์กรุณาสนับสนุนโครงการด้วยการบอกต่อ
มีส่วนร่วมโดยการสร้างประเด็นใหม่ ส่งคำขอดึงบน Github หรือคุณสามารถส่งอีเมลได้ที่: [email protected]
สร้างขึ้นภายใต้ใบอนุญาต MIT