1-1 加载页面

在controller 文件夹 新建 form.js

  1. 'use strict';
  2. const Controller = require('egg').Controller;
  3. class FormController extends Controller {
  4. async index() {
  5. const { ctx } = this;
  6. await ctx.render('form')
  7. }
  8. }
  9. module.exports = FormController;

在view 文件夹 新建 form.html

  1. <div class="container">
  2. <form action="/doForm" method="POST" role="form" enctype="multipart/form-data">
  3. <legend>添加小组成员</legend>
  4. <div class="form-group">
  5. <label for="">姓名</label>
  6. <input type="text" class="form-control" name="username" placeholder="请输入名字">
  7. </div>
  8. <div class="form-group">
  9. <label for="">年龄</label>
  10. <input type="text" class="form-control" name="age" placeholder="请输入年龄">
  11. </div>
  12. <div class="form-group">
  13. <label for="">性别</label>
  14. <input type="text" class="form-control" name="sex" placeholder="请输入年龄">
  15. </div>
  16. <div class="form-group">
  17. <label for="">上传图形</label>
  18. <input type="file" class="form-control" name="logo" placeholder="Input field">
  19. </div>
  20. <button type="submit" class="btn btn-primary">添加数据</button>
  21. </form>
  22. </div>

对应路由

  1. router.get('/form', controller.form.index);

1-2 对应提交页面

配置

config/config.default.js

image.png

  1. config.multipart = {
  2. mode: 'file',
  3. };

在controller 文件夹 新建 doForm.js

路由

  1. router.post('/doForm', controller.doForm.index);
  1. #doForm.js
  2. 'use strict';
  3. const Controller = require('egg').Controller;
  4. //上传文件
  5. const fs = require('mz/fs');
  6. const path = require("path")
  7. class DoFormController extends Controller {
  8. async index() {
  9. const { ctx } = this;
  10. // console.log(ctx.request.body);
  11. // console.log(ctx.request.files[0].filepath);
  12. //拿到提交数据
  13. var { username, age, sex } = ctx.request.body;
  14. age = Number(age)
  15. // console.log(username);
  16. //上传的图片路径
  17. var filename = ctx.request.files[0].filepath;
  18. // console.log(filename);
  19. var reader = fs.createReadStream(filename);
  20. //静态资源 写入路径
  21. var uploadFile = `${process.cwd()}/app/public/${path.basename(filename)}`;
  22. // console.log(uploadFile);
  23. var write = fs.createWriteStream(uploadFile);
  24. reader.pipe(write);
  25. //图片完整路径
  26. //主机ip+存放路径public+文件后缀名
  27. var logo = ctx.origin + "/public/" + path.basename(filename);
  28. // console.log(logo);
  29. //连接数据库
  30. var db = this.app.mongodb;
  31. const collection = await db.collection("member");
  32. // console.log(collection);
  33. //添加数据 与 数据库数据 比较 是否一样
  34. var res = await db.collection("member").find({ username }).toArray();
  35. if (res.length) {
  36. ctx.body = "<script>alert('已添加过该成员');location.href='/form'</script>"
  37. } else {
  38. //数据上传到数据库
  39. await collection.insertOne({ username, age, sex, logo })
  40. await ctx.redirect("/home")
  41. }
  42. }
  43. }
  44. module.exports = DoFormController;