1.安装环境
- node
- 下载地址:nodejs.cn/download/
- mongodb
- mongodb各平台下载地址:www.mongodb.com/download-ce…下载地址:studio3t.com/
2.利用koa脚手架搭建项目
利用脚手架搭建项目会方便很多哦,所以在这个demo中我选择了使用脚手架搭建项目,下面让我看看需要哪些准备工作把。
-
全局安装koa脚手架
npm install koa-generator -g -
创建项目
- koa2 koa-demo -e(后面带参数e表示使用ejs模板)koa-demo表示项目名称
-
安装依赖
cd koa-demo npm install -
运行项目
- 第一种npm start(每次修改代码需要重启项目)
- 第二种npm run dev(代码改变时自动重启项目)主要是因为用到了nodemon
-
本地访问localhost:3000,项目成功运行
3.定义路由实现接口
现在的项目目录结构如下:
|--bin
|--public
|--routes 路由文件
|-- index.js
|-- users.js
|--views
|-- app.js 入口文件
|-- package.json
- 现在我们在routes文件夹里面新建一个article.js的文件,定义一个新的路由
article.js文件内容
ctx.body表示服务端相应的数据
const router = require('koa-router')()
router.prefix('/api')
// router.get('/', function (ctx, next) {
// ctx.body = 'this is a users response!'
// })
// router.get('/bar', function (ctx, next) {
// ctx.body = 'this is a users/bar response'
// })
router.get('/getArticle', async(ctx, next) => {
ctx.body = {
code: 200,
message: '查询成功',
data: {}
}
});
module.exports = router
此时,我们打开localhost:3000/api/getArticle,页面返回not found。这是因为我们没有在app.js文件中注册这个新建的路由。修改app.js文件如下:
const Koa = require('koa')
const app = new Koa()
const views = require('koa-views')
const json = require('koa-json')
const onerror = require('koa-onerror')
const bodyparser = require('koa-bodyparser')
const logger = require('koa-logger')
const index = require('./routes/index')
const users = require('./routes/users')
const article = require('./routes/article') // 此处需要引入article路由
// error handler
onerror(app)
// middlewares
app.use(bodyparser({
enableTypes:['json', 'form', 'text']
}))
app.use(json())
app.use(logger())
app.use(require('koa-static')(__dirname + '/public'))
app.use(views(__dirname + '/views', {
extension: 'ejs'
}))
// logger
app.use(async (ctx, next) => {
const start = new Date()
await next()
const ms = new Date() - start
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})
// routes
app.use(index.routes(), index.allowedMethods())
app.use(users.routes(), users.allowedMethods())
app.use(article.routes(), users.allowedMethods()) // 在这use article路由
// error-handling
app.on('error', (err, ctx) => {
console.error('server error', err, ctx)
});
module.exports = app
这时我们在打开页面就可以看到返回结果了
4.post请求
脚手架中已安装koa-bodyparser这个插件,这里就不做过多阐述了。
5.配合mongodb实现接口
- 项目中安装mongoose
- npm i mongoose --save
- 项目中新建database.js文件,该文件是用来连接数据库
database.js文件内容如下:
var mongoose = require('mongoose');
var db = mongoose.connection;
mongoose.connect('mongodb://localhost:27017/test');
db.once('open', function() {
console.log('连接数据库成功')
})
这时我们需要在app.js中加载数据库模块,app.js文件内容如下:
const Koa = require('koa')
const app = new Koa()
const views = require('koa-views')
const json = require('koa-json')
const onerror = require('koa-onerror')
const bodyparser = require('koa-bodyparser')
const logger = require('koa-logger')
const index = require('./routes/index')
const users = require('./routes/users')
const article = require('./routes/article') // 此处需要引入article路由
//--------加载数据库模块,一定要放在koa前面---------
require("./database");
// error handler
onerror(app)
// middlewares
app.use(bodyparser({
enableTypes:['json', 'form', 'text']
}))
app.use(json())
app.use(logger())
app.use(require('koa-static')(__dirname + '/public'))
app.use(views(__dirname + '/views', {
extension: 'ejs'
}))
// logger
app.use(async (ctx, next) => {
const start = new Date()
await next()
const ms = new Date() - start
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})
// routes
app.use(index.routes(), index.allowedMethods())
app.use(users.routes(), users.allowedMethods())
app.use(article.routes(), users.allowedMethods()) // 在这use article路由
// error-handling
app.on('error', (err, ctx) => {
console.error('server error', err, ctx)
});
module.exports = app
- 项目中新建model文件夹,然后在新建articles.js文件,这一步是为了创建表结构
articles.js文件文件内容如下:
/*创建一个模型,建立对象与数据库中集合的一个映射*/
var mongoose = require('mongoose');
var Schema = mongoose.Schema; //概要计划,计划往数据库中准备存放哪些信息
var obj = {
title: String,
category: Number,
content: String,
createTime: Number,
modifyTime: Number
}
//建立一个模型,能访问数据库中articles这张表的内容
//参数Article表示数据库中集合名称,不存在会创建
var ArticleModel = mongoose.model('Article', new Schema(obj));
module.exports = ArticleModel;
- 到这里,数据库我们已经连接,表结构也已经创建,下面我们就要进行mongodb数据库操作,编写接口了
此时为了让我们的代码结构便于区分,我们将业务操作放到controllers文件夹中,并且修改路由文件夹下的articles.js文件,此时项目结构如下:
|-- bin
|-- controllers 业务操作
|-- article.js
|-- models
|-- articles.js 表结构
|-- public
|-- routes
|--- index.js
|--- users.js
|--- article.js
|-- views
|-- app.js 入口文件
|-- database.js 连接数据库
|-- package.json
articles.js文件内容如下:
const router = require('koa-router')()
const articleController = require('../controllers/article');
router.prefix('/api')
// router.get('/', function (ctx, next) {
// ctx.body = 'this is a users response!'
// })
// router.get('/bar', function (ctx, next) {
// ctx.body = 'this is a users/bar response'
// })
router.get('/getArticle', articleController.getArticle);
module.exports = router
controllers/article.js 文件内容,该接口是用来查询文章的,到此就结束啦!
const articleModel = require('../models/articles');
const getArticle = async(ctx, body) => {
const res = await articleModel.find({});
ctx.body = {
code: 200,
message: '查询成功',
data:res
}
}
module.exports = {
getArticle
}
- mongodb常用操作
- 查询
- find() 查询所有数据,返回的是数组
- findOne({name: 'beibei'}, func)查询某条数据,返回的是一个对象
- find({name: 'beibei'}, func)查询某条数据,返回的是数组
- 增加一条数据
- create()
- 删除数据
- remove()
- findByIdAndRemove()
- 修改数据
- updateOne() 这里就罗列出一点,大家可以自行去官网查看www.mongoosejs.net/docs/
- 查询