• 首先初始化项目

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搭建服务器的更多相关文章

  1. koa2搭建服务器+使用mongoose链接mangodb

    使用node搭建服务器,用到了现在比较流行的框架koa. 1.初始化package.json npm init -y 2.安装koa2 npm i koa --save 3.搭建服务器 const K ...

  2. Nodejs -- 使用koa2搭建数据爬虫

    当前爬虫项目开发所需中间件: cheerio: 则能够对请求结果进行解析,解析方式和jquery的解析方式几乎完全相同 cheerio中文文档 开发参考node - cheerio模块 superag ...

  3. iKcamp团队制作|基于Koa2搭建Node.js实战项目教学(含视频)☞ 环境准备

    安装搭建项目的开发环境 视频地址:https://www.cctalk.com/v/15114357764004 文章 Koa 起手 - 环境准备 由于 koa2 已经开始使用 async/await ...

  4. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 错误处理

    沪江CCtalk视频地址:https://www.cctalk.com/v/15114923887518 处理错误请求 爱能遮掩一切过错. 当我们在访问一个站点的时候,如果访问的地址不存在(404), ...

  5. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志

    沪江CCtalk视频地址:https://www.cctalk.com/v/15114923883523 log 日志中间件 最困难的事情就是认识自己. 在一个真实的项目中,开发只是整个投入的一小部分 ...

  6. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 视图Nunjucks

    视频地址:https://www.cctalk.com/v/15114923888328 视图 Nunjucks 彩虹是上帝和人类立的约,上帝不会再用洪水灭人. 客户端和服务端之间相互通信,传递的数据 ...

  7. iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 代码分层

    视频地址:https://www.cctalk.com/v/15114923889408 文章 在前面几节中,我们已经实现了项目中的几个常见操作:启动服务器.路由中间件.Get 和 Post 形式的请 ...

  8. Day12-微信小程序实战-交友小程序-搭建服务器与上传文件到后端

    要搞一个小型的cms内容发布系统 因为小程序上线之后,直接对数据库进行操作的话,慧出问题的,所以一般都会做一个管理系统,让工作人员通过这个管理系统来对这个数据库进行增删改查 微信小程序其实给我们提供了 ...

  9. 利用ADSL拨号上网方式如何搭建服务器

    序:搭建服务器需要两个条件硬件服务器和固定公网IP,随便一台个人电脑都可以作为硬件服务器,就剩下一个问题,如何获得一个固定公网IP. 第一章 扫盲:ADSL拨号上网方式,本地IP与公网IP的区别 一. ...

随机推荐

  1. stark组件开发之分页

    """ 分页组件 """ class Pagination(object): def __init__(self, current_page ...

  2. centos平台基于snort、barnyard2以及base的IDS(入侵检测系统)的搭建与测试及所遇问题汇总

    centos平台基于snort.barnyard2以及base的IDS(入侵检测系统)的搭建与测试及所遇问题汇总 原创 2016年12月19日 01:20:03 标签: centos / snort  ...

  3. python程序编写简介

    语句和语法 # 注释 \ 转译回车,继续上一行,在一行语句较长的情况下可以使用其来切分成多行,因其可读性差所以不建议使用 : 将两个语句连接到一行,可读性差,不建议使用 : 将代码的头和体分开 语句( ...

  4. iOS10 UIImageWriteToSavedPhotosAlbum程序奔溃crash解决办法

    Xcode报错: This app has crashed because it attempted to access privacy-sensitive data without a usage ...

  5. python bittorrent 使用与学习

    更新于20171128 关于这个p2p的技术,阿里开源了蜻蜓,大家可以看看,感觉应该比这个要好用,而且文档也全. 前言 最近在学习python的p2p协议,发现网上找不到好的文章,又仔细找了找终于找到 ...

  6. yum-内网yum源服务器配置(CentOS6.5)

    一.安装apache服务1.安装httpd服务 yum -y install httpd (纯内网用rpm包安装也可以) 2.启动httpd服务 service httpd start 二.挂载完整的 ...

  7. RabbitMQ与消息总线

    Windows环境安装RabbitMQ,https://www.cnblogs.com/xibei666/p/5931267.html 1.消息发送流程 using System; using Sys ...

  8. Hadoop 综合揭秘——MapReduce 基础编程(介绍 Combine、Partitioner、WritableComparable、WritableComparator 使用方式)

    前言 本文主要介绍 MapReduce 的原理及开发,讲解如何利用 Combine.Partitioner.WritableComparator等组件对数据进行排序筛选聚合分组的功能.由于文章是针对开 ...

  9. Linux和Windows下tomcat开机自启动设置

    Linux下tomcat的开机自启动设置 1.修改系统文件rc.local:vi /etc/rc.d/rc.local rc.local是给用户自定义启动时需要执行的文件,和windows里面的“启动 ...

  10. 什么是CDN及CDN加速原理

    目录 CDN是什么? CDN的相关技术 负载均衡技术 动态内容分发与复制技术 缓存技术 谁需要CDN? CDN的不足 随着互联网的发展,用户在使用网络时对网站的浏览速度和效果愈加重视,但由于网民数量激 ...