koa项目并详解 每个模块都可以单独使用
nodejs_ko
本项目学习需要掌握的知识点:
1.熟练使用koa搭建服务器
2.熟练使用koa-router的使用;并了解ctx的作用
3.熟练掌握此项目中用到的插件的用法及作用:
用到的插件包括("koa-json","nodemon","koa-router","koa-bodyparser")
4.掌握如何获取前端传来post数据;以及掌握formData数据是如何获取的
5.如何使用阿里云数据库(mongodb),以及阿里云存储
- 安装所需依赖
npm init //初始化项目 创建package.json文件
npm install koa --save //安装koa
npm install koa-json --save //
npm install nodemon --save //自动启动服务器
npm install koa-router --save//安装路由
npm install koa-bodyparser --save //获取ctx.request.body里的数据
npm install koa-multer --save //用来解析formData数据
npm install ali-oss --save//安装阿里云存储
-
在app.js中引入以上依赖
启动服务并创建路由
const koa = require('koa') //导入koa const router = require('koa-router')() //导入路由并创建路由对象 const bodyParser = require("koa-bodyparser"); const app = new koa()//实例化koa app.use(bodyParser()) const banner = require('./router.js')//引入下面创建的router.js文件 router.use("/api",banner) //在外部创建一个router.js,然后在app.js中引入传入到这里 app.use(router.routes()).use(router.allowedMethods()) //将koa-router上的所有路由和处理函数注册成中间件 app.listen(3000) console.log("本地服务器启动成功");
创建一个router.js
注:ctx是上下文 用来接收前端发来的请求数据
const router = require('koa-router')() //导入路由并创建路由对象
const {upload,uploading} = require(../oss/oss.js)//引入下面的oss.js文件;上传图片
router.get("/login",upload.single("file") async ctx=>{
ctx.body = "这是登陆漏油"//ctx.body向前端返回的数据
ctx.request.body//获取前端用post传来的数据,注意:要获取body里的数据必须安装插件"koa-bodyparser"
uploading(ctx.req.file.path).then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
})
module.exports = router.routes();
使用koa-multer解析前端传来的文件图片
新建一个oss.js文件夹
const multer = require("koa-multer")
//实现文件图片上传
//调用multer的存储对象
let storage = multer.diskStorage({
//图片存储路径;提前在后端文件夹中新建好;比如(publick/uploads)
destination:(rep,file,cb)=>{
cb(null,"publick/uploads/")//cb表示存储在哪里方法
},
//图片文件重命名
filename: (req, file, cb) => {
let formData = (file.originalname).split(".");
cb(null, Date.now() +"." +formData[formData.length - 1]);
},
})
//配置
let upload = multer({storage})
module.exports = upload
知识点二:使用阿里云存储oss
阿里云存储这个模块可以单独列出来也可以放在oss.js文件里
注:使用云存储先到阿里云注册账号申请 阿里云存储(ali-oss)
const oss = require("ali-oss")
//初始化
const client = new oss({
region: "********",//填写地域节点名称
accessKeyId: "**********",//填写秘钥id
accessKeySecret: "*********",//填写秘钥
bucket: "********",//填写存储桶名称
})
let uploading = function (image){
return new Promise((resolve,reject)=>{
//第一个参数是阿里云存储自己创建的文件路径,第二个参数要上传的文件路径
client.put("meituanoss/" + image, image).then(res=>{
resolve(res)
}).catch(err=>{
reject(err)
})
})
}
module.exports = {upload, uploading}//这和上面的文件在同一个文件里,也可单独列出去