业务流程.png

一、前端form.html

  1. <div class="container">
  2. <form action="http://localhost:8080/doForm"
  3. enctype="multipart/form-data"
  4. method="POST" role="form">
  5. <legend>添加小组成员</legend>
  6. <div class="form-group">
  7. <label for="">名字</label>
  8. <input type="text" class="form-control"
  9. name="name" placeholder="请输入组员的名字">
  10. </div>
  11. <div class="form-group">
  12. <label for="">年龄</label>
  13. <input type="text" class="form-control"
  14. name="age" placeholder="请输入组员的年龄">
  15. </div>
  16. <div class="form-group">
  17. <label for="">上传头像</label>
  18. <input type="file" class="form-control"
  19. name="logo" >
  20. </div>
  21. <button type="submit" class="btn btn-primary">添加</button>
  22. </form>
  23. </div>

二、服务器代码

image.png

  1. yarn add koa koa-router koa-static koa-body
  1. # models/index.js
  2. const { MongoClient} = require('mongodb');
  3. // Connection URL
  4. const url = 'mongodb://124.71.174.116:10040';
  5. const client = new MongoClient(url);
  6. const dbName = 'Student';
  7. async function main() {
  8. await client.connect();
  9. console.log('Connected successfully to server');
  10. const db = client.db(dbName);
  11. const collection = db.collection('member');
  12. return collection;
  13. }
  14. module.exports = main;
  1. # app.js
  2. const koa = require("koa");
  3. const app = new koa();
  4. const router = require("koa-router")();
  5. const main = require("./models")
  6. const koaBody = require("koa-body");
  7. const fs = require("fs");
  8. const path = require("path");
  9. const static = require("koa-static");
  10. router.get("/find",async ctx=>{
  11. var collection = await main();
  12. var result = await collection.find().toArray();
  13. ctx.body = result;
  14. })
  15. router.get("/add",async ctx=>{
  16. var collection = await main();
  17. var obj = {
  18. name:"吴章",
  19. age:17
  20. }
  21. var res = await collection.find({name:obj.name}).toArray();
  22. if(res.length){
  23. ctx.body = "数据库中已经添加了这位同学"
  24. }else{
  25. var result = await collection.insertOne(obj);
  26. console.log(result)
  27. }
  28. })
  29. router.post("/doForm",async ctx=>{
  30. var {name,age} = ctx.request.body;
  31. age = Number(age);
  32. var filename = ctx.request.files.logo.path
  33. /* 1、创建一个可读流 */
  34. var reader = fs.createReadStream(filename);
  35. /* 2、设置上传的文件名 */
  36. var uploadFile = `./static/${path.basename(filename)}`;
  37. /* 3、创建一个可写流 */
  38. var writer = fs.createWriteStream(uploadFile);
  39. /* 4、通过管道将可读流写入可写流 */
  40. reader.pipe(writer);
  41. // console.log(ctx.origin)
  42. var logo = ctx.origin +"/"+path.basename(filename);
  43. const collection = await main();
  44. await collection.insertOne({name,age,logo});
  45. await ctx.redirect("/find")
  46. })
  47. app.use(koaBody({
  48. multipart: true,
  49. formidable: {
  50. maxFileSize: 200 * 1024 * 1024,
  51. keepExtensions: true
  52. }
  53. }))
  54. app.use(static(path.join(__dirname,"static")))
  55. app.use(async (ctx,next)=>{
  56. ctx.set("Access-Control-Allow-Origin","*");
  57. await next();
  58. })
  59. app.use(router.routes());
  60. app.listen(8080);