• 首先初始化项目

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. [leetcode]59. Spiral Matrix II螺旋遍历矩阵2

    Given a positive integer n, generate a square matrix filled with elements from 1 to n^2 in spiral or ...

  2. [leetcode]90. Subsets II数组子集(有重)

    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...

  3. Linux下所有命令失效的解决方法

    今天在设置环境变量时,一不小心,设置错了,系统中的所有命令全部失效了,可把我急坏了,下面用一条命令可解决: 解决办法:重新设置环境变量PATH export PATH=/usr/sbin:/usr/b ...

  4. 20172325 2018-2019-2 《Java程序设计》第六周学习总结

    20172325 2018-2019-2 <Java程序设计>第六周学习总结 教材学习内容总结 本周学习第十章--树 1.什么是树 (1)树是一种数据结构,与之前学过的栈.队列和列表这些线 ...

  5. python基础之Day7part1集合

    一.集合 1.定义 s=set() 2.特点 每个元素必须是不可变类型,但集合本身是可变类型的,有add和remove等功能 3.用途 去重(原理:for循环if判断元素是否已存在,不存在则追加) 关 ...

  6. 使用itext生成pdf的,各种布局

    代码如下,jar包为itext.jar,itextAsia.jar,最好都是最新的 :2张图片也在最后贴出,把图片放到D盘可以直接生成制定格式的pdf. 最后生成的pdf如下: 代码如下: packa ...

  7. 【部署问题】解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid" failed(2:No such file or directory)

    问题:环境问题 解决方法: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 使用nginx -c的参数指定nginx.c ...

  8. org.apache.subversion.javahl.ClientException: Previous operation has not finished

    1.问题 eclipse使用SVN出现异常: org.apache.subversion.javahl.ClientException: Previous operation has not fini ...

  9. noip第17课资料

  10. UEditor的jQuery插件化 -转

    UEditor本身并不依赖jQuery,但如果在项目中同时使用两者的话,可能会希望使用jQuery语法创建和获取编辑器实例.为此,需要为jQuery编写插件,代码如下: (function ($) { ...