安装插件
npm install koa-static
新建文件夹public 和public/uploads 在router文件夹下面创建 router/uploads.js
// router/uploads.js
const path = require('path');
const Router = require('koa-router');
const router = new Router({ prefix: "/uploads" }); // /uploads请求接口地址
/**
* @route GET api/uploads
* @desc 测试接口地址
* @access 接口是公开的
*/
router.post('/', ctx => {
const file = ctx.request.files.file;
const basename = path.basename(file.path);
ctx.body = { url: `${ctx.origin}/uploads/${basename}` };
})
module.exports = router.routes();
在app.js里引入
// app.js
const Koa=require("koa")
const Router=require("koa-router")
const userRouter=require("./router/user.js") //路由
const uploadsRouter=require("./router/uploads") //路由
const koaBody=require("koa-body") //post请求获取值
const KoaStatic = require('koa-static')//上传图片,图片静态资源 ++
const path=require("path") // ++
const app=new Koa()
const router=new Router()
const mongoose = require('mongoose'); //连接数据库
mongoose.connect('mongodb://localhost/admin');
const db = mongoose.connection;
db.on('error', console.error.bind(console, '连接失败'));
db.once('open', function() {
console.log('连接成功');
});
// 静态资源访问功能
app.use(KoaStatic(path.join(__dirname, 'public'))) //++
app.use(koaBody({ //++
multipart: true, //++
formidable: { //++
uploadDir: path.join(__dirname, '/public/uploads'), //++
keepExtensions: true //++
} //++
})) //++
router.get("/",ctx=>{
ctx.body="Hello Koa"
})
app.use(koaBody())
app.use(userRouter)
app.use(uploadsRouter)
app.use(router.routes()).use(router.allowedMethods())
app.listen(3000,()=>{
console.log("正在监听3000的端口");
})
注意点 一定要改成File!!! Text会上传不成功
然后我们就可以拿到上传图片的链接,打开就可以看到我们上传的图片
koa中方法的作用
find() // 查看列表
// 用法
// const getUserList = async (ctx) => {
// ctx.body = await Users.find();
// };
findById()//查看列表某个数据
//用法
// const getUser = async (ctx) => {
// const user = await Users.findById(ctx.params.id);//ctx.params.id 一般是通过id来判断
// if (!user) {
// ctx.throw(404, "用户不存在");
// }
// ctx.body = user;
// };
//添加列表 findOne() 和 save()
//用法
// const createUser = async (ctx) => {
// let { name } = ctx.request.body;
// const user = await Users.findOne({ name }); //name 一般通过用户名来判断是否存在
// if (user) {
// ctx.throw(405, "已存在该用户!!!");
// } else {
// ctx.body = await new Users(ctx.request.body).save();
// }
// };
save()//只添加
//用法
// const createUser = async (ctx) => {
// ctx.body = await new Users(ctx.request.body).save();
// };
findByIdAndUpdate()//修改某个数据
//用法
// const updateUser = async (ctx) => {
// let { id } = ctx.params;
// const user = await Users.findByIdAndUpdate(id, ctx.request.body);
// if (!user) {
// ctx.throw(404, "用户不存在");
// }
// ctx.status = 200;
// ctx.body = { msg: "修改成功" };
// };
findByIdAndDelete()//删除
//用法
// const deleteUser = async (ctx) => {
// let { id } = ctx.params;
// const user = await Users.findByIdAndDelete(id);//通过id判断
// if (!user) {
// ctx.throw(404, "用户不存在!!!");
// }
// ctx.status = 200;
// ctx.body = { msg: "删除成功" };
// };
findOne()//查找 一般在登录里面用
//用法
// const login = async (ctx) => {
// const user = await Users.findOne(ctx.request.body);//查找是否有
// if (!user) {
// ctx.throw(401, "用户名或密码错误");
// }
// ctx.body = { msg: "登录成功", token };
// };