koa2搭建服务器+使用mongoose链接mangodb
使用node搭建服务器,用到了现在比较流行的框架koa。
1、初始化package.json
npm init -y
2、安装koa2
npm i koa --save
3、搭建服务器
const Koa = require('koa')
const app = new Koa()
app.use( async(ctx) => {
ctx.body = "hello world"
})
app.listen(3000, () => {
console.log('demo2 is run')
})
4、直接运行
node index.js
5、加入get或者post请求
app.use(async(ctx) => {
if (ctx.url === '/' && ctx.method === 'GET') {
let html = `
<h2>This is demo2</h2>
<form method="POST" action="/">
<p>username:</p>
<input name="username">
<p>age:</p>
<input name="age">
<p>website</p>
<input name="website">
<button type="submit">submit</button>
</form>
`
ctx.body = html
} else if (ctx.url === '/' && ctx.method === 'POST') {
let postData = await parsePostDate(ctx)
ctx.body = postData
} else {
ctx.body = '<h2>404</h2>'
}
})
const parsePostDate = (ctx) => {
return new Promise((resolve, reject) => {
try{
let postData = ""
ctx.req.on('data', (data) => {
postData += data
})
ctx.req.addListener("end", function() {
let parseData = parseQueryStr(postData)
resolve(parseData)
})
} catch(error) {
reject(error)
}
})
}
const parseQueryStr = (queryStr) => {
const queryData = {}
const queryStrList = queryStr.split('&')
console.log(queryStrList)
for (let [index,queryStr] of queryStrList.entries()) {
let itemList = queryStr.split('=')
console.log(itemList)
queryData[itemList[0]] = decodeURIComponent(itemList[1])
}
return queryData
}
6、上面简单介绍了koa怎么开启简单的服务器,但是koa的强大之处在于能够加入很多好用的中间件
7、加入koa-bodyparser中间件简化post请求后
app.use(async(ctx) => {
if (ctx.url === '/' && ctx.method === 'GET') {
let html = `
<h2>This is demo2</h2>
<form method="POST" action="/">
<p>username:</p>
<input name="username">
<p>age:</p>
<input name="age">
<p>website</p>
<input name="website">
<button type="submit">submit</button>
</form>
`
ctx.body = html
} else if (ctx.url === '/' && ctx.method === 'POST') {
let postData = ctx.request.body
ctx.body = postData
} else {
ctx.body = '<h2>404</h2>'
}
})
8、加入koa-router中间件简化请求判断
router
.get('/', (ctx, next) => {
let html = `
<h2>This is demo2</h2>
<form method="POST" action="/">
<p>username:</p>
<input name="username">
<p>age:</p>
<input name="age">
<p>website</p>
<input name="website">
<button type="submit">submit</button>
</form>
`
ctx.body = html
})
.post('/',(ctx, next) => {
let postData = ctx.request.body
ctx.body = postData
})
app
.use(router.routes())
.use(router.allowedMethods())
9、引入koa2-cors中间件,设置请求跨域与请求类型
app.use(cors({
origin: function (ctx) {
if (ctx.url === '/test') {
return "*"; // 允许来自所有域名请求
}
return 'http://localhost:8080'; / 这样就能只允许 http://localhost:8080 这个域名的请求了
},
exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
maxAge: 5,
credentials: true,
allowMethods: ['GET', 'POST', 'DELETE'],
allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
}))
10、加入koa-static中间件,服务器可访问静态文件
// 引入node的path方便一些
const path = require('path')
app.use(static((path.join(__dirname, 'images'))))
11、还可以引入koa-send实现文件下载
router.get('/download', async function (ctx) {
// 为了方便演示,这里直接下载index页面
var fileName = 'index.html';
// Set Content-Disposition to "attachment" to signal the client to prompt for download.
// Optionally specify the filename of the download.
// 设置实体头(表示消息体的附加信息的头字段),提示浏览器以文件下载的方式打开
// 也可以直接设置 ctx.set("Content-disposition", "attachment; filename=" + fileName);
ctx.attachment(fileName);
await send(ctx, fileName, { root: __dirname + '/public' });
});
12、服务器整体构建完成,那么就要链接数据库(请自行在电脑上安装mongodb,https://www.mongodb.com/)
13、加入mongoose依赖链接本地的mangodb
// 直接在index.js下引入
const mongoose = require('mongoose') var dbUrl = `mongodb://127.0.0.1:27017/test` mongoose.connect(dbUrl, {useNewUrlParser:true} ,(err) => {
if (err) {
console.log('Mongoose connection error: ' + err.message)
} else {
console.log('数据库连接成功')
}
}) mongoose
.connection
.on('disconnected', function () {
console.log('Mongoose connection disconnected')
}) module.exports = mongoose
14、mongoose的增删改查,mongoose都是要先创建一个图表(Schema)然后再对其进行操作
const mongoose = require('mongoose')
// 创图表
var schema = new mongoose.Schema({
num:Number,
name: String,
size: String
})
// 增
new model({age:10,name:'save'}).save(function(err,doc){
console.log(doc);
})
// 删
temp.remove({name:/30/},function(err){})
// 改
await model.update({age:{$gte:20}},{age:40},function(err,raw){
console.log(raw);
})
// 查
await model.find((err,doc) => {
console.log(doc)
})
15、详细点的mangoose增删改查
//增(new + save)
let data = await(()=>{
return new Promise((resolve, reject) => {
new model({age:10,name:'save'}).save(function(err,doc){
//[ { _id: 59720bc0d2b1125cbcd60b3f, age: 10, name: 'save', __v: 0 } ]
console.log(doc)
resolve(doc)
});
})
})() //删(deleteOne或者deleteMany)
let data =await model.deleteMany({name:/save/},function(err){}) //改(updateOne或者updateMany)
let data =await model.update({num:{$gte:20}},{num:40},function(err,raw){}) //查(find)
let data = await model.find(function (err,doc) {})
16、文档判断
$or 或关系
$nor 或关系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多个值范围内
$nin 不在多个值范围内
$all 匹配数组中多个值
$regex 正则,用于模糊查询
$size 匹配数组大小
$maxDistance 范围查询,距离(基于LBS)
$mod 取模运算
$near 邻域查询,查询附近的位置(基于LBS)
$exists 字段是否存在
$elemMatch 匹配内数组内的元素
$within 范围查询(基于LBS)
$box 范围查询,矩形范围(基于LBS)
$center 范围醒询,圆形范围(基于LBS)
$centerSphere 范围查询,球形范围(基于LBS)
$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素
参考链接:
1、mongoose基础入门https://www.cnblogs.com/xiaohuochai/p/7215067.html?utm_source=itdadao&utm_medium=referral
2、koa初体验https://www.jianshu.com/p/b988ce30bac3
3、koa快速入门https://www.cnblogs.com/houhanbin121456/p/8297472.html
4、使用koa离不开的十个中间件https://www.jianshu.com/p/c1e0ca3f9764
koa2搭建服务器+使用mongoose链接mangodb的更多相关文章
- koa2搭建服务器
首先初始化项目 npm init -y 安装koa2 npm install koa --save 项目根目录 新建 index.js //这是最基本的服务 const Koa = require(' ...
- Nodejs -- 使用koa2搭建数据爬虫
当前爬虫项目开发所需中间件: cheerio: 则能够对请求结果进行解析,解析方式和jquery的解析方式几乎完全相同 cheerio中文文档 开发参考node - cheerio模块 superag ...
- 云端搭建Linux学习环境 链接https://edu.aliyun.com/article/19 (阿里云ECS服务器 )课堂
云端搭建Linux学习环境 链接https://edu.aliyun.com/article/19 1. 开通云服务器 2 1.包年包月 按量付费(适合测试数据的时候) 2 2.地域 服务器数 ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志
沪江CCtalk视频地址:https://www.cctalk.com/v/15114923883523 log 日志中间件 最困难的事情就是认识自己. 在一个真实的项目中,开发只是整个投入的一小部分 ...
- node-express项目的搭建并通过mongoose操作MongoDB实现增删改查分页排序(四)
最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. Mongoose是在node.js ...
- iKcamp团队制作|基于Koa2搭建Node.js实战项目教学(含视频)☞ 环境准备
安装搭建项目的开发环境 视频地址:https://www.cctalk.com/v/15114357764004 文章 Koa 起手 - 环境准备 由于 koa2 已经开始使用 async/await ...
- Telegraf+InfluxDB+Grafana搭建服务器监控平台
Telegraf+InfluxDB+Grafana搭建服务器监控平台 tags:网站 个人网站:https://wanghualong.cn/ 效果展示 本站服务器状态监控:https://statu ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 错误处理
沪江CCtalk视频地址:https://www.cctalk.com/v/15114923887518 处理错误请求 爱能遮掩一切过错. 当我们在访问一个站点的时候,如果访问的地址不存在(404), ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 视图Nunjucks
视频地址:https://www.cctalk.com/v/15114923888328 视图 Nunjucks 彩虹是上帝和人类立的约,上帝不会再用洪水灭人. 客户端和服务端之间相互通信,传递的数据 ...
随机推荐
- ES6-Set 和 Map 数据结构
ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3 ...
- UWP数据分享
前言 本文介绍如何在通用Windows平台(UWP)应用程序中支持共享合同.共享合同是一种在应用程序之间快速共享数据(如文本,链接,照片和视频)的简便方法.例如,用户可能想要使用社交网络应用与他们的朋 ...
- wpf企业应用之UI模块解耦
关于UI模块的解耦,说简单点,首先需要配置菜单与对应操作类的映射关系(或存放于配置文件,或继承接口直接写死在模块代码中,或存放到数据库,原理都一样),然后在菜单加载时,读取配置项动态生成菜单或是其他控 ...
- Palindromic Tree 回文自动机-回文树 例题+讲解
回文树,也叫回文自动机,是2014年被西伯利亚民族发明的,其功能如下: 1.求前缀字符串中的本质不同的回文串种类 2.求每个本质不同回文串的个数 3.以下标i为结尾的回文串个数/种类 4.每个本质不同 ...
- 「CTSC2016」单调上升路径
「CTSC2016」单调上升路径 解题思路:根据提示可以得到答案的下界是 \(n - 1\) ,然后打表发现这个下界好像一定可以取到. 事实上考虑 \(n\) 个点完全图的边数是 \(\frac{n( ...
- Codeforces 650 D. Zip-line
$ >Codeforces \space 650 D. Zip-line<$ 题目大意 : 有一个长度为 \(n\) 的序列 \(h\) ,\(m\) 次询问,每一次询问求如果把序列中第 ...
- [BZOJ2429][HAOI2006]聪明的猴子(最小生成树)
性质:最小生成树上任意两点间的最大边权,一定是这两点间所有路径的最大边权中最小的.证明显然. #include<cstdio> #include<cstring> #inclu ...
- mac安装redis拓展
安装 下载源码 编译安装 添加拓展 添加权限重启 安装 在mac上安装了php7.1.7 php -m 查看安装的拓展,没有redis,以前可以brew install php71-redis简单命令 ...
- python开发_calendar
如果你用过linux,你可能知道在linux下面的有一个强大的calendar功能,即日历 在python中,同样也有这样的一个强大的calendar 下面是我做的demo: #python中的cal ...
- SCOJ 4429: frog's dice 最大流
4429: frog's dice 题目连接: http://acm.scu.edu.cn/soj/problem.action?id=4429 Description frog has many d ...