관리_시스템
소개
koa2
기반의 백그라운드 관리 시스템입니다.
jQuery
프론트엔드 JS 프레임워크로 사용 bootstrap
CSS 프레임워크로 사용 pug
/ jade
및 handlebars
HTML 페이지 템플릿으로 사용 PostgreSql
사용하여 비즈니스 데이터 저장 mongodb
사용하여 session
저장
Bookshelf
+ Knex
ORM
및 Query Builder
로 사용
오류 정보에 대한 피드백을 수집하기 위한 플랫폼으로 Sentry
사용합니다. AJAX
사용하여 프런트 엔드 요청을 처리합니다. CronJob
라이브러리를 사용하여 예약된 작업 실행을 완료합니다.
디렉토리 구조 및 바벨 구성은 https://github.com/17koa/koa-demo를 참고하세요.
원본 링크는 삭제된 것 같습니다. https://github.com/liuyueyi1995/koa2-demo 에서 포크한 버전입니다.
웹사이트의 프런트 엔드 코드는 내 이전 프로젝트 중 하나인 https://github.com/liuyueyi1995/oa에서 가져왔습니다.
기본 작업
- 백엔드 관리자 로그인 등록
- 나. 이용자 정보 관리
- C 사용자 역할 관리
- 라 조직관리
- E 프로젝트 관리
- F 백엔드 페이징 +
AJAX
통한 쿼리 및 검색으로 얻은 내용을 표시합니다. - G 임시 사용자 생성 및 임시 역할 할당 및 재활용
- H 로그 관리
완전성
- 기본 MVC 구조가 완료되었습니다.
- 등록, 로그인, 세션 읽기 및 쓰기를 포함하여 작업 A가 완료되었습니다.
- 사용자 정보 조회, 퍼지 검색, 기본 정보 추가, 삭제, 수정, 비밀번호 수정을 포함한 작업 B가 완료되었습니다.
- 다중 테이블 쿼리, 퍼지 검색, 계단식 드롭다운 메뉴 처리, 정보 추가 및 삭제를 포함하여 작업 C가 완료되었습니다.
- 기관정보조회, 퍼지검색, 추가, 삭제, 수정을 포함한 과제D가 완료되었습니다.
- 프로젝트 정보 조회, 퍼지 검색, 추가, 삭제 및 수정을 포함한 작업 E가 완료되었습니다.
- 페이징 버튼 클릭 이벤트가 트리거될 때 검색 상자에 콘텐츠가 있는지 여부를 판단하여 백그라운드에서 반환되는 결과 집합이 결정됩니다.
- 작업 G는 사용자를 내부 사용자와 외부 사용자로 나누고, 다양한 비밀번호 생성 방법을 사용하여 역할에 만료 시간 속성을 추가함으로써 만료된 역할 정보를 정기적으로 정리합니다.
- 로그 보기 및 퍼지 검색을 포함하여 작업 G가 완료되었습니다.
- 폼의 표현 형태가 개선되었고, 드롭다운 메뉴가 수정되었으며, 날짜 컨트롤이 추가되었으며, 불리언 값 입력이 라디오 형태로 되었습니다.
- 사용자 로그인과 데이터 관리의 두 가지 기능이 연관되어 있습니다.
- 외부 역할과 내부 역할의 구분이 완료되었으며 역할의 마감일 설정이 완료되었습니다.
TODO
- 날짜, 숫자 및 부울 값에 대한 쿼리를 개선해야 합니다(예: 타임스탬프, 부울).
- 사용자 입력 확인을 개선해야 합니다(예: 이메일, 전화).
- 코드 재사용 정도를 향상시킵니다.
집중하다
민감한 정보가 포함된 config.js
파일이 저장소에서 삭제되었으므로 이를 사용할 때 추가해야 합니다.
var config = {
database: '',
username: '',
password: '',
host: '',
port:
};
module.exports = config;
문제
- 계단식 메뉴에 처음에는
type
변경하지 않으면 site
목록이 표시되지 않는 버그가 있습니다.- 해결되었습니다.
-
onchange
에 문제가 있을 것입니다. -
type
드롭다운 메뉴에 기본 null 값을 추가하여 사용자가 이를 변경하도록 강제합니다.
- 데이터베이스를 수정한 후에도
updated_at
값은 변경되지 않았습니다.- 해결되었습니다.
-
model
정의할 때 hasTimestamps:true
추가하기만 하면 됩니다.
- 데이터베이스를 수정하면 목록 순서가 중단됩니다.
- 해결되었습니다.
- 데이터베이스가 검색 결과를 반환하기 전에
orderBy
사용하여 검색 결과를 정렬합니다.
- 역할 관리 페이지에서 사이트 값이 비어 있는 경우 간헐적으로 추가가 실패할 수 있습니다.
- 해결되었습니다.
- 프런트엔드
null
이 백엔드로 반환되면 빈 문자열이 되어 외래 키의 integer
유형과 충돌합니다.
- 페이징 후 후속 콘텐츠가 수정되면 수정이 성공한 후 첫 번째 페이지로 다시 이동합니다.
- 페이징 후 검색 결과에 여러 페이지의 콘텐츠가 있는 경우 두 번째 페이지를 클릭하면 원래 결과의 두 번째 페이지로 돌아갑니다.
- 해결되었습니다.
- 이제 페이징
AJAX
처리가 하나만 있으므로 검색 결과를 페이징에 표시하려면 다른 상태를 추가해야 합니다. - 원본 페이징을 기반으로 판단을 추가하고,
- 이때 검색창에 내용이 있으면 이 내용으로 데이터베이스를 쿼리하여 해당 페이지의 내용을 반환합니다.
- 이때 검색창이 비어 있으면 원본 데이터에 해당하는 페이지의 내용이 반환됩니다.
- 검색 후 페이징 구성 요소의 페이지 수가 올바르지 않습니다. 예를 들어 원래 결과에는 5페이지가 있지만 검색 결과에는 2페이지만 있지만 5개의 페이지 번호 버튼이 계속 표시됩니다.
- 해결되었습니다.
- 검색 후 결과 수를 얻고 페이징 버튼을 다시 그립니다.
- 여러 번 검색할 때 페이징 구성 요소의 페이지 수가 올바르지 않습니다. 예를 들어 첫 번째 검색 결과에는 2페이지가 있고 두 번째 검색 결과에는 3페이지가 있지만 여전히 2개의 페이지 번호 버튼만 표시됩니다.
- 해결되었습니다.
- 검색창의 내용을 실시간으로 가져오고 내용이 비어 있으면 페이지를 새로 고칩니다.
-
handlebars
템플릿을 사용할 때 타임스탬프가 잘못 구문 분석됩니다.- 해결되었습니다.
- 타임스탬프를 구문 분석하려면 맞춤
helper
사용하세요.
- 로그인하지 않은 경우 URL을 수정하면 로그인을 생략하고 데이터베이스를 직접 운영하게 됩니다.
- 해결되었습니다.
- 각
get
요청을 반환하기 전에 session
판단을 추가하세요. session
비어 있으면 login
페이지로 이동하세요.
- 내부 사용자를 삭제하려면 조인이 필요합니다. pgsql의 삭제는
using
만 지원하고 bookshelf는 using
지원하지 않습니다.- 해결되었습니다.
- 대신
knex
사용하여 쿼리를 직접 완료하세요.
- 날짜/시간 필드 값이 범위를 벗어났습니다.
- 해결되었습니다.
- 로컬 테스트 데이터베이스와 Alibaba Cloud 데이터베이스는 모두 pgsql9.4이지만 검토 메커니즘은 다릅니다.
- 알리바바 클라우드의 날짜 차별은 오전, 오후(AM/PM)에는 나타나지 않는 것 같습니다.
- 따라서 날짜 형식을 지정하기 위해
Date
클래스에 format
메서드가 추가되었습니다.
- 검색 결과와 전체 결과 간을 전환합니다.
- 해결되었습니다.
- 가장 초기의 방법은 실시간 모니터링을 사용하는 것이었습니다. 검색 상자가 비어 있으면 페이지가 새로 고쳐지지만 일부 브라우저 및 운영 체제에서는 유효하지 않습니다.
- 따라서 대신 배너에서 링크하는 방법을 사용하여 검색 결과에서 모든 결과로의 링크를 제공하십시오.
- 긴 날짜 형식은 너무 많은 페이지를 차지합니다.
- 해결되었습니다.
- 백엔드에서는 형식을 지정하고 단순화하여 날짜를 처리합니다.
- 백그라운드 데이터베이스 작업에서 오류가 보고되면 프런트 엔드에서는 관련 정보에 대한 피드백을 받지 못합니다.
- 해결되었습니다.
- 오류 판단을 내리려면 백엔드에 then().catch() 블록을 추가하세요.
- 다음 단계는 특정 오류 코드를 분석하고 자세한 정보를 프런트 엔드에 알리는 것입니다.
- 역할을 추가할 때 동일한 이름을 가진 사용자는 구별할 수 없습니다.
- 해결되었습니다.
- 사용자 이름 뒤에 이메일 주소를 표시하여 동일한 이름을 가진 사용자를 구별합니다.