nodejs + express + mongodb + react + layui 완전한 소설 읽 기 시스템 - 열 독
저 는 전단 공 성 사자 입 니 다. 스 택 엔지니어 에 대한 동경 에 따라 nodejs 가 웹 서버 를 구축 하 는 것 을 배 웠 습 니 다. 배 운 지식 에 따라 간단 하고 간단 한 소설 읽 기 시스템 인 열 독 을 만 들 었 습 니 다.먼저 보 는 것 이 즐겁다. 이 시스템 은 백 스테이지 서비스, 데이터 베이스 저장, 백 스테이지 관리 단, 클 라 이언 트 APP 를 포함한다.배경 관리 단 은 책 관리 (첨삭 검사), 사용자 관리 (신규, 동결, 해동) 클 라 이언 트 를 포함한다. 등록, 로그 인, 책장 추가, 읽 기, 공유 등 이다.
기술 창고
서버: nodejs, express 데이터베이스: mongodb 배경 관리: layui, jquery 클 라 이언 트: react
3. 개발 절차
성명: 아래 의 설치 개발 절 차 는 모두 윈도 운영 체제 아래 이다.
1. nodejsnodejs 설치 가 매우 간단 합 니 다. nodejs 홈 페이지 에 가서 해당 버 전의 nodejs 설치 패 키 지 를 다운로드 하 십시오.
다운로드 가 완 료 된 후 설 치 를 클릭 하고 설치 가 완 료 될 때 까지 next 를 계속 클릭 하면 됩 니 다.설치 완료 후 명령 행 도구 (win + r, cmd 입력) 를 열 고 명령 행 에서 node - v 명령 을 실행 합 니 다. 출력 버 전 번 호 는 설치 성공 을 설명 합 니 다. 그렇지 않 으 면 설치 에 실패 하고 실패 원인 을 스스로 검사 합 니 다.
2. MongoDB 설치
nodejs mongodb mongodb , , [MongoDB][4]
2.1 다운로드 완료 후 설 치 를 더 블 클릭 하면 custom 사용자 정의 설치 디 렉 터 리 를 선택 할 수 있 습 니 다.
2.2 브 라 우 저 를 클릭 하여 설치 디 렉 터 리 선택
2.3 next 를 클릭 하여 다음 단계 에 들 어간 다음 에 install mongodb compass 를 선택 하 는 것 을 취소 합 니 다. 그렇지 않 으 면 장시간 동안 설 치 를 실행 할 수 있 습 니 다. MongoDB Compass 는 그래 픽 인터페이스 관리 도구 입 니 다. 우 리 는 뒤에서 스스로 홈 페이지 에 가서 설 치 를 다운로드 하고 주 소 를 다운로드 할 수 있 습 니 다.https://www.mongodb.com/downl...。
2.4 데이터 디 렉 터 리 를 만 들 고 MongoDB 는 db 디 렉 터 리 에 데 이 터 를 저장 하지만 이 데이터 디 렉 터 리 는 주동 적 으로 만 들 지 않 습 니 다. 설치 가 끝 난 후에 data / db 디 렉 터 리 를 만들어 야 합 니 다. 데이터 디 렉 터 리 는 루트 디 렉 터 리 에 두 어야 합 니 다 (예: C: datadb 또는 D: datadb 등).
2.5 데이터 베 이 스 를 시작 합 니 다. cd 는 mongodb 에 디 렉 터 리 를 설치 한 bin 디 렉 터 리 에 cd c: mongodbbin 을 실행 합 니 다. mongod -- dbpath c: datadb 를 실행 합 니 다. 그 중에서 c: datadb 는 당신 이 만 든 데이터 저장 디 렉 터 리 입 니 다.
3. expresscd 를 프로젝트 디 렉 터 리 에 설치 하고 명령 행 에서 npm install express -- save 설치 express 패 키 지 를 실행 npm install body - parser -- save 를 실행 합 니 다. JSON, Raw, Text 와 URL 인 코딩 을 처리 하 는 데 사용 되 는 데 이 터 를 npm install cookie - parser -- save 를 통 해 쿠키 를 분석 하 는 도 구 를 실행 합 니 다. req. cookies 를 통 해 전 송 된 쿠키 를 가 져 오고 npm install mul 을 대상 으로 전환 할 수 있 습 니 다.ter -- save 는 enctype = "multipart / form - data" (폼 의 MIME 인 코딩 설정) 폼 데 이 터 를 처리 하 는 데 사 용 됩 니 다.
4. 루트 와 http 설정 새 파일 app. js, 내용 은 다음 과 같 습 니 다.
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
//
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
// res.header("access-control-expose-headers", "Authorization");
res.header("Access-Control-Allow-Headers", "Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE");
next();
});
// json body
app.use(bodyParser.json());
//string body
app.use(bodyParser.urlencoded({
extended: false
}));
//
app.use(express.static(__dirname + '/public'));
//
app.use('/baseWeb/book/', require('./routes/baseweb_book'));
// app
app.use('/webphone/bookPhone/', require('./routes/webPhone_book'));
app.listen(8080);
4. nodejs mongodb 데이터베이스 서비스 연결, npm install mongodb 설치 의존 패키지 실행
const MongoClient = require('mongodb').MongoClient;
const ObjectID = require('mongodb').ObjectID;
const url = "mongodb://localhost:27017/books";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
const DBO = db.db("books");
// books user
//
let data = {name: 'lilei', sex:1};
DBO.collection("user").insertOne(data, function(err, result) {
if (err) throw err;
console.log(" ");
});
//
let data = [
{name: 'lilei', sex:1},
{name: 'hanmeimei', sex:0}
];
DBO.collection("user").insertMany(data, function(err, res) {
if (err) throw err;
console.log(" " + res.insertedCount + " ");
});
//
//
var whereStr = {name: 'lilei'}; //
DBO.collection("user").deleteOne(whereStr , function(err, result) {
if (err) throw err;
console.log(" ");
});
//
var whereStr = {name: 'lilei'}; //
DBO.collection("user").deleteMany(whereStr , function(err, result) {
if (err) throw err;
console.log(" ");
});
//
//
let whereStr = {"name":'hanmeimei'}; //
let updateStr = {$set: { "name" : "missDeng" }};
DBO.collection("user").updateOne(whereStr, updateStr, function(err, res) {
if (err) throw err;
console.log(" ");
});
//
let whereStr = {"name":'hanmeimei'}; //
let updateStr = {$set: { "name" : "missDeng" }};
DBO.collection("user").updateMany(whereStr, updateStr, function(err, res) {
if (err) throw err;
console.log(" ");
});
//
let obj = {};// ,
DBO.collection("user").find(obj).toArray(function(err, result){
if (err) throw err;
console.log(result);
});
});
5. 새 routes 디 렉 터 리, routes 디 렉 터 리 에 webPhone book. js 파일 을 만 듭 니 다. 내용 은 다음 과 같 습 니 다.
const express = require("express");
const fs = require('fs');
const path = require('path');
const crypto = require('crypto'); //
const router = express.Router();
const MongoClient = require('mongodb').MongoClient;
const ObjectID = require('mongodb').ObjectID;
const url = "mongodb://localhost:27017/books";
//
const buf = new Buffer.alloc(2048);
//
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
const DBO = db.db("books");
// app
router.post('/enroll', function(req, res){
let data = {
userName: req.body.userName,
sex: req.body.sex,
userPhone: req.body.userPhone,
userEmail: req.body.userEmail,
password: req.body.password,
status: 1
}
for(let k in data){
if(!data[k]){
res.json({code:4, content:" "});
return false
}
}
DBO.collection("user").find({userPhone: data.userPhone}).count(function(err, num){
if(err) throw err;
if(num == 0){
//
let pwObj = encrypt(data.password);
data.password = pwObj.pw;
data.key = pwObj.key;
DBO.collection("user").insertOne(data, function(err, result) {
if (err){
res.json({code:4, content: " "});
throw err;
}
res.json({code:1, content: " "});
})
}else{
res.json({code:2, content: " "})
}
});
});
// APP
router.post('/login', function(req, res){
let userPhone = req.body.userPhone;
let password = req.body.password;
if(userPhone && password){
DBO.collection("user").find({userPhone: userPhone}).toArray(function(err, resArr) {
if (err) throw err;
if (resArr.length > 0) {
password = password + resArr[0].key;
let md5 = crypto.createHash('md5');
let r = md5.update(password).digest('hex');
if (r == resArr[0].password) {
res.json({code: 1,content: resArr[0]._id});
} else {
res.json({code: 2,content: " "});
}
} else {
res.json({code: 2,content: " "});
}
})
}else{
res.json({code: 4, content: " "});
}
});
});
module.exports = router;
6. layui 를 사용 하여 백 엔 드 관리 전단 페이지 를 만 들 고 인터페이스 7 을 연결 하 며 react 를 사용 하여 APP 클 라 이언 트 프로젝트 를 만 들 고 hbuilder 를 사용 하여 apk 설치 패키지 로 포장 합 니 다.
4. 총화 와 수확
이전에 서버 개발 을 체계적으로 배 운 적 이 없어 서 개발 과정 에서 많은 문제 에 부 딪 혔 습 니 다. 예 를 들 어 크로스 도 메 인 문제, 파일 읽 기와 쓰기, 파일 업로드, 파일 다운로드, 데이터 베이스 디자인 등 이 있 습 니 다. 이런 문제 들 은 저 를 좌절 시 키 지 않 았 고 오히려 싸 울 수록 용감 해 졌 습 니 다. 어떻게 든 해결 하려 고 했 습 니 다. 완 성 된 후에 클 라 우 드 서버 에 배치 되 어 친구 에 게 사용 하 는 것 을 추천 합 니 다. 성취 감 이 폭발 적 입 니 다.물론 이 시스템 은 신생아 입 니 다. 아직 부족 하고 최적화 해 야 할 부분 이 많 습 니 다. 여러분 의 아 낌 없 는 가르침 을 바 랍 니 다. 전체 프로젝트 github 주소:https://github.com/jaxlix/hap...안 드 로 이 드 패키지 QR 코드 다운로드:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[React.js] React Queryfetching : 데이터 요청 상태 네트워크에서 데이터를 fetch 하고 A 라는 query key 로 캐싱함 만일 cacheTime 이 지나기 전에 A 쿼리 인스턴스가 새롭게 mount 되면, fetch 가 실행...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.