koa2搭建服務器


  • 首先初始化項目

npm init -y

  • 安裝koa2

    npm install koa --save

  • 項目根目錄 新建 index.js

//這是最基本的服務
const Koa = require('koa');
const app = new Koa();

app.use(async(ctx)=>{
	ctx.body = '<h1>hello world</h1>'
});
app.listen(3000,()=>{
	console.log('[server]started at port 3000....')
})
  • 本地安裝mongodb數據庫。

  • 添加環境變量 ,按提示創建文件夾。 data/db/

  • 安裝 robo3數據庫可視化工具。

  • 安裝mongoose

npm install mongoose --save

  • 創建 database文件夾,schema文件夾 ,初始化連接數據庫文件 init.js
npm install --save bcrypt  

schema 文件如下

const  bcrypt = require('bcrypt');
const SALT_WORK_FACTOR = 10;  //加鹽位數

//創建User Schema
const userSchema = new Schema({
	UserId: ObjectId,
	userName:{unique:true,type:String },
	password:{type:String},
	createAt:{type:Date,default:Date.now()},
	lastLogin:{type:Date,default:Date.now()}
},{collection:'user'})

userSchema.pre('save',function(next){
	bcrypt.genSalt(SALT_WORK_FACTOR,(err,salt)=>{
		if(err) return next(err);
		bcrypt.hash(this.password,salt,(err,hash)=>{
			if(err) return next(err)
			this.password = hash;
			next();
		})
		
	})
});
//發布模型
mongoose.model('User',userSchema);

init.js

const mongoose = require('mongoose');
const db = 'mongodb://localhost/simle-db';

const glob = require('glob'); //需要安裝
const { resolve } = require('path');  //node內置

exports.initSchemas = () => {
	glob.sync(resolve(__dirname,'./schema','**/*.js')).forEach(require)

}

exports.connect = () => {
	//連接數據庫
	mongoose.connect(db);
	let maxConnectTimes = 0;
	return new Promise((resolve,reject)=>{
		
		//增加數據庫監聽事件  斷開連接
		mongoose.connection.on('disconnected',()=>{
			console.log('*****數據庫斷開')
			if(maxConnectTimes < 3){
				mongoose.connect(db)
				maxConnectTimes++;
			}else{
				reject();
				throw new Error('數據庫出現問題...')
			}
			
		// 錯誤
		})
		mongoose.connection.on('error',(err)=>{
			console.log('*****數據庫錯誤')
			if(maxConnectTimes < 3){
				mongoose.connect(db)
				maxConnectTimes++;
			}else{
				reject(err);
				throw new Error('數據庫出現問題...')
			}
		})
		
		//鏈接打開時
		mongoose.connection.once('open',()=>{
			console.log('mongDB connected successfully...  ')
			resolve();
		})
	})
}

  • 在index.js下自執行
const { connect ,initSchemas } = require('./database/init.js');
;(async ()=>{
	await connect();
	initSchemas();	
})()
  • 安裝路由,分模塊
npm install --save koa-router
const Router = require('koa-router');
let user = require('./appApi/user.js');
let home = require('./appApi/home.js');


// 裝載所有子路由
let router = new Router();
router.use('/user',user.routes())
router.use('/home',home.routes())

// 加載路由中間件
app.use(router.routes())
app.use(router.allowedMethods())
  • 安裝koa-bodyparser和 koa2-cors,解決參數和跨域問題
npm install --save koa-bodyparser koa2-cors
//index.js
// 接收請求的中間件
const bodyParser = require('koa-bodyparser');
// 支持跨域的中間件
const cors = require('koa2-cors');
const bodyParser = require('koa-bodyparser');
// 支持跨域的中間件
const cors = require('koa2-cors');

//這兩個是需要放到其他app.use操作之前才生效
app.use(bodyParser())
app.use(cors())

  • 根目錄新建 api文件夾,分模塊寫接口,比如 user.js

const Router = require('koa-router');
let router = new Router();
const mongoose = require('mongoose');

router.get('/',async(ctx)=>{
	ctx.body= "這是用戶操作首頁"
})

router.post('/register',async(ctx)=>{
// 	console.log('------11')
// 	console.log(ctx.request.body);
// 	console.log('------11')
// 	ctx.body = ctx.request.body;

	//取得model
	const User = mongoose.model('User');
	
	//把從前端接收的POST數據封裝成一個新的user對象
	let newUser = new User(ctx.request.body);
	
	//使用mongoose的save方法直接存儲,然后判斷是否成功
	await newUser.save().then(()=>{
		//保存成功 返回code == 200,並返回成功信息
		
		ctx.body = {
			code : 200,
			msg:"注冊成功"
		}
	}).catch(error =>{
		//失敗返回 code = 500,返回錯誤信息
		ctx.body = {
			code: 500,
			message:error
		}
	})
	
})

module.exports = router;
  • node index.js 啟動服務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM