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 启动服务
koa2搭建服务器的更多相关文章
- koa2搭建服务器+使用mongoose链接mangodb
使用node搭建服务器,用到了现在比较流行的框架koa. 1.初始化package.json npm init -y 2.安装koa2 npm i koa --save 3.搭建服务器 const K ...
- Nodejs -- 使用koa2搭建数据爬虫
当前爬虫项目开发所需中间件: cheerio: 则能够对请求结果进行解析,解析方式和jquery的解析方式几乎完全相同 cheerio中文文档 开发参考node - cheerio模块 superag ...
- iKcamp团队制作|基于Koa2搭建Node.js实战项目教学(含视频)☞ 环境准备
安装搭建项目的开发环境 视频地址:https://www.cctalk.com/v/15114357764004 文章 Koa 起手 - 环境准备 由于 koa2 已经开始使用 async/await ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 错误处理
沪江CCtalk视频地址:https://www.cctalk.com/v/15114923887518 处理错误请求 爱能遮掩一切过错. 当我们在访问一个站点的时候,如果访问的地址不存在(404), ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志
沪江CCtalk视频地址:https://www.cctalk.com/v/15114923883523 log 日志中间件 最困难的事情就是认识自己. 在一个真实的项目中,开发只是整个投入的一小部分 ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 视图Nunjucks
视频地址:https://www.cctalk.com/v/15114923888328 视图 Nunjucks 彩虹是上帝和人类立的约,上帝不会再用洪水灭人. 客户端和服务端之间相互通信,传递的数据 ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 代码分层
视频地址:https://www.cctalk.com/v/15114923889408 文章 在前面几节中,我们已经实现了项目中的几个常见操作:启动服务器.路由中间件.Get 和 Post 形式的请 ...
- Day12-微信小程序实战-交友小程序-搭建服务器与上传文件到后端
要搞一个小型的cms内容发布系统 因为小程序上线之后,直接对数据库进行操作的话,慧出问题的,所以一般都会做一个管理系统,让工作人员通过这个管理系统来对这个数据库进行增删改查 微信小程序其实给我们提供了 ...
- 利用ADSL拨号上网方式如何搭建服务器
序:搭建服务器需要两个条件硬件服务器和固定公网IP,随便一台个人电脑都可以作为硬件服务器,就剩下一个问题,如何获得一个固定公网IP. 第一章 扫盲:ADSL拨号上网方式,本地IP与公网IP的区别 一. ...
随机推荐
- 联想RD450带Read10服务器操作系统密码忘记
联想RD450带Read10服务器操作系统密码忘记 可以用U盘PE进入重写密码 按F1进入BIOS界面设置如下 进入BOOT选项卡,设置U盘第一启动,也就是图中 Boot Option #1 设置为 ...
- python的基本用法(三)字符串常用函数
字符串常用函数 # s='.abcd.'# new_s=s.strip('.')#默认去掉字符串两边的空格和换行符,想去掉什么括号中就写什么# print('s',s)# print('new_s', ...
- idea打包含第三方依赖的jar包
1.打开idea,打开java项目,选择file-->Project Structure,添加依赖的jar包 2.配置artfacts 点击ok,不需要做任何操作 点击jar,右键新建一个lib ...
- BZOJ5017 [SNOI2017]炸弹 - 线段树优化建图+Tarjan
Solution 一个点向一个区间内的所有点连边, 可以用线段树优化建图来优化 : 前置技能传送门 然后就得到一个有向图, 一个联通块内的炸弹可以互相引爆, 所以进行缩点变成$DAG$ 然后拓扑排序. ...
- overlay fs挂载及操作测试
overlayfs是目前使用比较广泛的层次文件系统,实现简单,性能较好,可以充分利用不同或则相同overlay文件系统的page cache,具有 上下合并 同名遮盖 写时拷贝 等特点. 一个 ove ...
- spring boot2 集成Redis
1. 引入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...
- [solution] JZOJ3493 三角形
[solution] JZOJ3493 三角形 Description 平面上有n个点,求出用这些点可以构成的三角形数. Input 第一行一个整数n. 接下来n行,每行两个整数,表示点的坐标. Ou ...
- tarjan求强连通分量+缩点+割点/割桥(点双/边双)以及一些证明
“tarjan陪伴强联通分量 生成树完成后思路才闪光 欧拉跑过的七桥古塘 让你 心驰神往”----<膜你抄> 自从听完这首歌,我就对tarjan开始心驰神往了,不过由于之前水平不足,一 ...
- DDD简明入门之道 - 开篇
DDD简明入门之道 - 开篇 犹豫了很久才写下此文,一怕自己对DDD的理解和实践方式有偏差,二怕误人子弟被贻笑大方,所以纰漏之处还望各位谅解.不啰嗦,马上进入正题,如果你觉得此文不错就点个赞吧. 概述 ...
- 背水一战 Windows 10 (71) - 控件(控件基类): UIElement - RenderTransform(2D变换), Clip(剪裁)
[源码下载] 背水一战 Windows 10 (71) - 控件(控件基类): UIElement - RenderTransform(2D变换), Clip(剪裁) 作者:webabcd 介绍背水一 ...