koa2+react 学习备注

本文介绍使用Koa作为后端服务器与React前端框架结合时的常见问题及解决方案,包括处理静态文件、前后端路由冲突、状态管理和文件上传等。

用koa-static做静态文件服务器。

如果和react一起用,会有问题,因为react会做前端路由。

地址栏打入什么都访问不到后端内容。

用fetch可以。

react里组件要取数据,可以在constructor中,props可以通过标记属性传递

< Test id= "lg3" />

可以用如下代码访问。

id= {this. props. id }

如果希望通过Link 的path传参数,path支持通配符,可以用console.log打印出this.props。自己琢磨下,

,state用来设置组件的内部变量,可以通过button的onClick 事件来响应用户点击。其他事件在react-web中可能不支持

例子中经常用到...props,这是es6的新功能,可以参考

深入理解 ES6 的解构赋值https://segmentfault.com/a/1190000008038703

在node中导入导出用require和module.exports 
在es6中用import 和export

获取上传的文件,koa-body中间件可以看下面的文章

Koa2 之文件上传下载的示例代码

http://www.jb51.net/article/137369.htm

还有

koa-bodyparser

koa-body和koa-bodyparser用哪个好呢?

先看koa的ctx,可以读到query和querystring,所以以get+query方式提交的参数,不需要用中间件了。

如http://localhost:3000/query?a=2&b=3

query={ a: '2', b: '3' },已经被解析成json

querystring 为 “a=2&b=3”

那么如果是post的数据,则在ctx.request.body中。

在react中,可以在onchange事件中,获取到当前input的值(

event . target . value

),赋值给state,或者通过setState更新当前input的值

具体可以打印出event看。

然后在submit事件中,添加处理代码,可以从state里读取到需要的值

找到一种更简单的方法,在submit事件中,可以用如下代码,直接获取表单的value值。

event . target . disc . value
其中target是当前表单,disc是表单中的某个input对象。这样就可以处理后提交到服务器了。


那么在后台呢,如何获得提交的数据和文件?

打印出ctx.request, 会发现request.body 没有定义。原始的req对象比较难读。

可以用koa-bodyparser中间件。不过koa-body貌似不支持文件上传,

所以我们这里用koa-body,代码如下,具体参考

node.js Koa 框架 的Cookies、表单、文件上传功能详解

https://www.xttblog.com/?p=1753

const os = require( 'os' );
const path = require( 'path' );
const koaBody = require( 'koa-body' );
const fs=require('fs');
const main = async function (ctx) {
   const tmpdir = os.tmpdir();
   const filePaths = [];
   const files = ctx.request.body.files || {};
   for (let key in files) {
     const file = files[key];
     const filePath = path.join(tmpdir, file.name);
     const reader = fs.createReadStream(file.path);
     const writer = fs.createWriteStream(filePath);
     reader.pipe(writer);
     filePaths.push(filePath);
   }
   ctx.body = filePaths;
};
app.use(koaBody({ multipart: true }));


智能交通综合教学管理系统(题目一) 第一部分,交通教学资料管理 1、专业名称(专业ID、专业名称、专业描述) 2、课程资源表(资源ID、资源名称、资源类型、上传时间、文件路径、所属课程ID、上传 教师ID) 3、知识点(知识点ID、知识点名称、知识点内容、教学重难点、学时、所属课程ID) 4、项目(项目ID、项目名称、项目介绍、实施步骤、学时) 第二部分,考勤打分、答疑 1、试题库(试题ID,试题题目,试题类型,试题答案,分值,知识点ID) 2、答题(用户ID,试题ID,用户答案,得分) 3、论坛(主题ID,主题,内容,发布时间,用户ID,知识点ID) 4、学习记录表(学生ID、课程ID、学习时长、学习日期、完成的课程资源ID、完成的知识 点ID) 第三部分:用户资料管理 1、学生(学生ID、学生姓名、学生性别、年纪、专业、所在班级,入学年份) 2、教师(教师ID、教师姓名、教师性别、年纪、专业) 3、用户管理(用户ID、密码) 备注:用户ID学生ID、教师ID一致 4、用户权限(用户ID、模块名称) 主要实现如下功能: 1、 教学管理员可以对专业名称、课程名称进行增删改查。 2、 教师可以对交通教学资料、试题库进行增删改查。 3、 学生可以查看教学资料(如pdf在线阅览)、答题、学习知识点。 4、 生成学习进度统计图表,用图表形式展示学生学习热度、完成度。 5、 错题本自动生成,自动记录学生答错题目,方便复习。 用vscode完成
最新发布
06-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值