TCG开发日志(6)Koa-body与Json的传输

在服务端和客户端之间用http的方式传递json时,现在可以在客户端用fetch发起请求:

var datas = {
  foo:1,
  bar:2
}

var ret = await fetch(‘/api/‘, {
  method: ‘POST‘,
  headers:{
    ‘Content-Type‘ : ‘application/json‘
  },
  body:JSON.stringify(datas)
});

本来在fetch后的URL中应该填写localhost:3000/api的,但是在本地调试出现了跨域问题,这时可以通过设置webpack-dev-server的代理来解决。

在webpack.config.js的devServer中加入proxy项:

devServer:{
  proxy:{
    ‘/api/*‘:{
      target:"http://localhost:3000/",
      secure:false
    }
  }
}

服务端,此时在app.use(async ctx=>{})中,确实能收到相应的ctx,但如何获取客户端传上来的JSON呢?用ctx.req.body或ctx.request.body都是拿不到的,

此时要用如下方法:

ctx.req.on(‘data‘, function(data){
  console.log(data);
})

log出来的data是一个char buffer:

对照ASCII,它就是之前被JSON化的BODY:  {"foo":1,"bar":2},当然,自己处理它不是不可以,有点麻烦。

koa的一个中间件koa-body可以方便的处理这个问题,先安装它:

npm install koa-body --save

在处理body之前,先执行这个中间件就可以了,中间件会把最后的结果存放到ctx.request.body里。

import koabody from ‘koa-body‘;

.....

app.use(koabody({}));

app.use(async ctx=>{
  console.log(ctx.request.body);

  ctx.body = {
    message:"hello!"
  }
})

于是能看到body中的foo:1和bar:2了,顺便,用ctx.body向客户端返回一个json,在客户端可以用如下方法处理:

var retjson = await ret.json();

用上述方法就可以实现服务端和客户端互相发送json。

时间: 2024-10-18 05:24:39

TCG开发日志(6)Koa-body与Json的传输的相关文章

TCG开发日志(1)后端的HelloWorld

最近准备把很久以前一直想做的一个TCG做出来,借这个项目练习前端和后端,也顺便把开发的过程都记录下来造福后人. 经过几天的查询,准备前端用ReactJS,后端用Node.js(KOA),Socket.io,MySQL. 之前准备使用NoSQL的数据库,但Redis对Windows平台的支持不好,MongoDB必须手写事务,所以还是决定用MySQL. 以上每种技术都几乎处于没学过的状态,所以等于是从零开始.这样也可以当作一个Tutorial. 首先去 https://nodejs.org/en/

TCG开发日志(3)socket.io

为了让网页端和服务端能随时互相通讯,以前在HTTP下有多种写法,但是现在我们可以使用websocket,至少在Chrome上可以. 先安装socket.io npm install socket.io --save 在服务端,可以将socket.io和KOA结合起来: import Koa from 'koa';import IO from 'socket.io' let app = new Koa();let server = require('http').Server(app.callba

TCG开发日志(2)从零开始,ReactJS的Helloworld

ReactJS是今年很流行的前端框架,我以前做兼职的时候写过一个用PHP+Smarty+HTML+JQUERY的小网站, 当时只是感觉JQuery是一个用起来很方便的库,但是React完全不同,所有的写法都变了,组件化的开发过程也很流畅,代码管理也方便. 那么当然先要安装React,在工程目录下: npm install react --save npm install react-dom --save 显然我要使用ES6,所以还有一套Babel,其中,比起服务端,特别需要添加这个插件: npm

TCG开发日志(5)Decorator, React-router

通过webpack可以把整个React项目整合成一个单页面的网站,此时可以通过react-router来处理路由. 首先安装: npm install react-router --save 由于react-router使用了history,要在webpack.config.js中进行相应的配置: devServer: { historyApiFallback: true } 否则,类似localhost:8080/foo的URL会返回404.之后为了将整个项目做成一个单页面,做如下处理: im

TCG开发日志(4)Sequelize

用Sequelize的好处是Sequelize中的query是一个promise,可以用await调用,不用写非常复杂的回调结构. 那么首先还是安装: npm install sequelize --save npm install mysql --save 我在本机上用了wamp,可以在localhost/phpmyadmin中看到可视化的数据库. 首先在本地建立一个数据库tcgtest,之后在服务端连接它: import Sequelize from 'sequelize'; let seq

基于 Koa平台Node.js开发的KoaHub.js的输出json到页面代码

koahub-body-res koahub body res Format koa's respond json. Installation $ npm install koahub-body-res Use with koa var app = require('koa')(); var koaRes = require('koahub-body-res'); app.use(koaRes()); this.data = 'This is a body'; this.msg = 'This 

常规功能和模块自定义系统 (cfcmms)—030开发日志(创建ManyToMany的column5)

030开发日志(创建ManyToMany的column5) 现在对于这个字段来说,还剩最后一个功能了,那就是可以修改ManyToMany的值了.在grid的inline操作里面,是可以直接删除已有值,但是如果要新增的话,就必须要有一个新的界面了.下面来看看开发修改ManyToMany字段所需要的步骤. 1.创建一个修改窗口,在里面创建一个可check的树: 2?到后台请求数据,读取当前记录的所有的ManyToMany的可选项,并把已经选中的打勾: 3?根据读取到的数据更新树: 4?用户操作che

常规功能和模块自定义系统 (cfcmms)—032开发日志(用GoJS来绘制模块关系图)

032开发日志(用GoJS来绘制模块关系图) 本系统现在尚没有流程和图表的功能,现在感觉在操作模块的各种功能的时候如果有一个模块关系图,那么就会更直观.网上找了一些绘制图表的库,看了一下GoJS也不错,入门也比较容易.经过一些工作,对业务模块作了一个简单的关系图. GoJS的基础知识请看官网的介绍,在上面的模块图中,有模块节点和连线二种信息需要定义.用户业务模块数据都是由后台组织好后发送到前台的. 整个绘制流程图的界面模块是一个Panel,在render的时候从后台加载数据,然后绘制.js类如下

[课程设计]任务进度条&开发日志目录

[课程设计]任务进度条&开发日志目录 任务进度条&开发日志目录         周    期          时     间       任       务   Sprint One    11.14     ●  Scrum团队分工及明确任务1.0    Sprint One     11.15      ● Sprint One    11.16     ● Sprint One    11.17     ●