การจัดการ_ระบบ
การแนะนำ
นี่คือระบบการจัดการเบื้องหลังที่ใช้ koa2
ใช้ jQuery
เป็นเฟรมเวิร์ก JS ส่วนหน้า ใช้ bootstrap
เป็นเฟรมเวิร์ก CSS ใช้ pug
/ jade
และ handlebars
เป็นเทมเพลตหน้า HTML ใช้ PostgreSql
เพื่อจัดเก็บข้อมูลธุรกิจ ใช้ mongodb
เพื่อจัดเก็บ session
การใช้ Bookshelf
+ Knex
เป็น ORM
และ Query Builder
ใช้ Sentry
เป็นแพลตฟอร์มสำหรับรวบรวมข้อเสนอแนะเกี่ยวกับข้อมูลข้อผิดพลาด ใช้ AJAX
เพื่อประมวลผลคำขอส่วนหน้า ใช้ไลบรารี CronJob
เพื่อดำเนินงานตามกำหนดเวลาให้เสร็จสิ้น
สำหรับโครงสร้างไดเร็กทอรีและการกำหนดค่า babel โปรดดูที่ https://github.com/17koa/koa-demo
ดูเหมือนว่าลิงก์ดั้งเดิมจะถูกลบไปแล้ว นี่คือเวอร์ชันที่ฉันแยกออกhttps://github.com/liuyueyi1995/koa2-demo
โค้ดส่วนหน้าของเว็บไซต์มาจากหนึ่งในโปรเจ็กต์ก่อนหน้าของฉัน https://github.com/liuyueyi1995/oa
งานพื้นฐาน
- การลงทะเบียนเข้าสู่ระบบผู้ดูแลระบบแบ็กเอนด์
- B การจัดการข้อมูลผู้ใช้
- การจัดการบทบาทผู้ใช้ภาษาซี
- ง. การจัดการองค์กร
- การจัดการโครงการอี
- F แสดงเนื้อหาที่ได้รับจากการสืบค้นและค้นหาผ่านเพจส่วนหลัง +
AJAX
- G การสร้างผู้ใช้ชั่วคราวและการจัดสรรและการรีไซเคิลบทบาทชั่วคราว
- การจัดการบันทึก H
ความสมบูรณ์
- โครงสร้าง MVC พื้นฐานเสร็จสมบูรณ์แล้ว
- งาน A เสร็จสมบูรณ์แล้ว รวมถึงการลงทะเบียน การเข้าสู่ระบบ และการอ่านและเขียนเซสชั่น
- งาน B เสร็จสมบูรณ์แล้ว รวมถึงการสืบค้นข้อมูลผู้ใช้ การค้นหาแบบคลุมเครือ การเพิ่มเติม การลบ การแก้ไขข้อมูลพื้นฐาน และการแก้ไขรหัสผ่าน
- งาน C เสร็จสมบูรณ์แล้ว รวมถึงการสืบค้นหลายตาราง การค้นหาแบบคลุมเครือ การประมวลผลเมนูแบบเลื่อนลงแบบเรียงซ้อน การเพิ่มและการลบข้อมูล
- งาน D เสร็จสมบูรณ์แล้ว รวมถึงการสืบค้นข้อมูลสถาบัน การค้นหาแบบคลุมเครือ การเพิ่มเติม การลบ และการแก้ไข
- งาน E เสร็จสมบูรณ์แล้ว รวมถึงการสืบค้นข้อมูลโครงการ การค้นหาแบบคลุมเครือ การเพิ่มเติม การลบ และการแก้ไข
- งาน F เสร็จสมบูรณ์แล้ว โดยการตัดสินว่าช่องค้นหามีเนื้อหาเมื่อมีการทริกเกอร์เหตุการณ์การคลิกปุ่มเพจหรือไม่ ชุดผลลัพธ์ที่ส่งคืนโดยพื้นหลังจะถูกกำหนด
- งาน G เสร็จสิ้นแล้ว โดยการแบ่งผู้ใช้ออกเป็นผู้ใช้ภายในและภายนอก โดยใช้วิธีการสร้างรหัสผ่านที่แตกต่างกัน การเพิ่มแอตทริบิวต์เวลาหมดอายุให้กับบทบาท พื้นหลังจะล้างข้อมูลบทบาทที่หมดอายุเป็นประจำ
- งาน G เสร็จสิ้นแล้ว รวมถึงการดูบันทึกและการค้นหาแบบคลุมเครือ
- ปรับปรุงรูปแบบการนำเสนอของแบบฟอร์ม แก้ไขเมนูแบบเลื่อนลง เพิ่มการควบคุมวันที่ และการป้อนค่าบูลีนจะอยู่ในรูปแบบของวิทยุ
- ฟังก์ชันสองประการของการเข้าสู่ระบบของผู้ใช้และการจัดการข้อมูลมีความเกี่ยวข้องกัน
- ความแตกต่างระหว่างบทบาทภายนอกและภายในเสร็จสิ้นแล้ว และการกำหนดเส้นตายของบทบาทได้เสร็จสิ้นแล้ว
สิ่งที่ต้องทำ
- จำเป็นต้องปรับปรุงการค้นหาวันที่ ตัวเลข และค่าบูลีน (เช่น การประทับเวลา บูลีน)
- จำเป็นต้องปรับปรุงการตรวจสอบอินพุตของผู้ใช้ (เช่น อีเมล โทรศัพท์)
- ปรับปรุงระดับการใช้โค้ดซ้ำ
จุดสนใจ
ไฟล์ config.js
ที่มีข้อมูลที่ละเอียดอ่อนถูกลบออกจาก repo และจำเป็นต้องเพิ่มเมื่อใช้งาน:
var config = {
database: '',
username: '',
password: '',
host: '',
port:
};
module.exports = config;
ปัญหา
- มีข้อบกพร่องในเมนูแบบเรียงซ้อน ในตอนแรก ไม่สามารถแสดงรายการ
site
โดยไม่เปลี่ยน type
- แก้ไขแล้ว
- มันควรจะเป็นปัญหากับ
onchange
- โดยการเพิ่มค่า Null เริ่มต้นให้กับเมนูแบบเลื่อนลง
type
ให้บังคับให้ผู้ใช้เปลี่ยนค่าดังกล่าว
- หลังจากแก้ไขฐานข้อมูลแล้ว ค่า
updated_at
จะไม่เปลี่ยนแปลง- แก้ไขแล้ว
- เพียงเพิ่ม
hasTimestamps:true
เมื่อกำหนด model
- หลังจากแก้ไขฐานข้อมูลแล้ว ลำดับของรายการจะหยุดชะงัก
- แก้ไขแล้ว
- ใช้
orderBy
เพื่อเรียงลำดับผลการค้นหาก่อนที่ฐานข้อมูลจะส่งคืน
- บนเพจการจัดการบทบาท เมื่อค่าไซต์ว่างเปล่า การเพิ่มอาจล้มเหลวในบางครั้ง
- แก้ไขแล้ว
- เมื่อ
null
ส่วนหน้าถูกส่งกลับไปยังส่วนหลัง จะกลายเป็นสตริงว่าง ซึ่งขัดแย้งกับประเภท integer
ของคีย์นอก
- หลังจากเพจแล้ว หากเนื้อหาต่อมาได้รับการแก้ไข เนื้อหาจะข้ามกลับไปยังหน้าแรกหลังจากการแก้ไขสำเร็จ
- หลังจากแบ่งเพจแล้ว หากผลการค้นหามีเนื้อหาหลายหน้า การคลิกที่หน้าที่ 2 จะกลับไปยังหน้าที่ 2 ของผลการค้นหาเดิม
- แก้ไขแล้ว
- เนื่องจากขณะนี้มีการประมวลผล
AJAX
การเพจเพียงรายการเดียว หากคุณต้องการให้ผลลัพธ์การค้นหาแสดงในเพจ คุณต้องเพิ่มสถานะอื่น - เพิ่มการตัดสินตามเพจต้นฉบับ
- หากมีเนื้อหาในช่องค้นหาในขณะนี้ ฐานข้อมูลจะถูกสอบถามด้วยเนื้อหานี้ และเนื้อหาของหน้าที่ตรงกันจะถูกส่งกลับ
- หากช่องค้นหาว่างเปล่าในขณะนี้ เนื้อหาของหน้าที่สอดคล้องกับข้อมูลต้นฉบับจะถูกส่งกลับ
- หลังจากค้นหา จำนวนหน้าในส่วนประกอบการเพจไม่ถูกต้อง เช่น ผลลัพธ์ต้นฉบับมี 5 หน้า แต่ผลการค้นหามีเพียง 2 หน้า แต่ปุ่มหมายเลขหน้า 5 ยังคงแสดงอยู่
- แก้ไขแล้ว
- หลังจากค้นหา ให้รับจำนวนผลลัพธ์และวาดปุ่มเพจใหม่
- เมื่อค้นหาหลายครั้ง จำนวนหน้าในส่วนประกอบการเพจไม่ถูกต้อง ตัวอย่างเช่น ผลการค้นหาแรกมี 2 หน้า และผลการค้นหาที่สองมี 3 หน้า แต่ยังคงแสดงเพียง 2 ปุ่มหมายเลขหน้า
- แก้ไขแล้ว
- รับเนื้อหาของช่องค้นหาแบบเรียลไทม์ และรีเฟรชหน้าเมื่อเนื้อหาว่างเปล่า
- เมื่อใช้แม่แบบ
handlebars
การประทับเวลาจะถูกแยกวิเคราะห์ไม่ถูกต้อง- แก้ไขแล้ว
- ใช้
helper
ที่กำหนดเองเพื่อแยกวิเคราะห์การประทับเวลา
- หากคุณไม่ได้เข้าสู่ระบบ การแก้ไข URL จะข้ามการเข้าสู่ระบบและดำเนินการกับฐานข้อมูลโดยตรง
- แก้ไขแล้ว
- ก่อนที่จะส่งคืนคำ
get
แต่ละรายการ ให้เพิ่มการพิจารณา session
หาก session
ว่างเปล่า ให้ข้ามไปที่หน้า login
- การลบผู้ใช้ภายในจำเป็นต้องเข้าร่วม การลบของ pgsql รองรับเฉพาะ
using
และชั้นวางหนังสือไม่รองรับ using
.- แก้ไขแล้ว
- ใช้
knex
เพื่อกรอกแบบสอบถามโดยตรงแทน
- ค่าฟิลด์วันที่/เวลาอยู่นอกช่วง
- แก้ไขแล้ว
- แม้ว่าฐานข้อมูลทดสอบในเครื่องและฐานข้อมูล Alibaba Cloud จะเป็นทั้ง pgsql9.4 แต่กลไกการตรวจสอบก็แตกต่างกัน
- การเลือกปฏิบัติวันที่ของ Alibaba Cloud ดูเหมือนจะไม่สามารถปรากฏในช่วงเช้าและบ่ายได้ (AM/PM)
- ดังนั้นจึงมีการเพิ่มวิธี
format
ให้กับคลาส Date
เพื่อจัดรูปแบบวันที่
- การสลับระหว่างผลการค้นหาและผลลัพธ์ทั้งหมด
- แก้ไขแล้ว
- วิธีแรกสุดคือใช้การตรวจสอบแบบเรียลไทม์ เมื่อช่องค้นหาว่างเปล่า เพจจะถูกรีเฟรช แต่วิธีนี้ใช้ไม่ได้กับเบราว์เซอร์และระบบปฏิบัติการบางระบบ
- เลยใช้วิธีลิงก์ในแบนเนอร์แทนเพื่อให้ลิงก์จากผลการค้นหาไปยังผลลัพธ์ทั้งหมดแทน
- รูปแบบวันที่ยาวกินเวลาหลายหน้าเกินไป
- แก้ไขแล้ว
- ที่แบ็กเอนด์ ให้จัดการวันที่โดยการจัดรูปแบบและทำให้ง่ายขึ้น
- หากมีการรายงานข้อผิดพลาดในการดำเนินการฐานข้อมูลเบื้องหลัง ส่วนหน้าจะไม่ได้รับการตอบกลับของข้อมูลที่เกี่ยวข้อง
- แก้ไขแล้ว
- เพิ่มบล็อก then().catch() ให้กับแบ็กเอนด์เพื่อตัดสินข้อผิดพลาด
- ขั้นตอนต่อไปคือการวิเคราะห์รหัสข้อผิดพลาดเฉพาะและแจ้งข้อมูลรายละเอียดให้ส่วนหน้าทราบ
- เมื่อเพิ่มบทบาท จะไม่สามารถแยกแยะผู้ใช้ที่มีชื่อเดียวกันได้
- แก้ไขแล้ว
- แยกแยะผู้ใช้ที่มีชื่อเดียวกันโดยระบุที่อยู่อีเมลของตนหลังชื่อผู้ใช้