smallpath / blog

前后端分离+服务端渲染的博客系统. 基于Vue2、Koa2、MongoDB、Redis

Home Page:https://smallpath.me

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Patch请求和delete请求出问题

anli001024 opened this issue · comments

commented

比如编辑更新一片文章,用patch请求访问 http://127.0.0.1:3000/api/post/58c95aa85d311c6e5000e3af 这个地址,出现了下面的错误,但是文章其实已经在数据库已经更新好了。
无论是更新(patch),删除(delete)文章,分类,标签等,都出现这种问题。
image

后台路由:
image

后台更新文章方法:
image

后台更新文章方法中console.log(result)的提示:
image

在前台使用的是fetch发起请求:
image

最奇怪的是get请求和post请求都没有问题,只有patch、delete、put请求出现这种问题。

应该是404返回Not Found, 然后你调用res.json()的时候没法把Not Found解析成JSON,于是报错说第一个字母N词法错误。

感觉要么是fetch请求格式有错, 要么是后端解析请求格式解析错了,稍后我做一下测试

我尝试了一下,浏览器环境的fetch和node环境的fetch都没问题啊。
image

你函数中headers里没有authorization字段应该会被服务器拒绝修改的,你是不是自己修改了permission函数?koa2中在回调里调用next函数就会出现你这种情况,应当将回调的形式改为co/generator或者async/await这样的假协程形式

另外可以贴一下浏览器network页面中patch请求的详情,确保发起的请求没有问题

commented

谢谢,看了你的分析之后,我找到问题出现所在了。
因为还没做到验证登录那块,所以我直接把permission函数里面的内容注释掉了,只写了个next(),就出现了以上的问题。
我的解决方法: return netxt();
这样就。。解决了!
是因为koa-router里面的中间件必须return一个值吗?

koa2中的next()返回的是promise,估计koa中检查到非promise的返回值时就直接跳到默认的Error Handler中间件了

commented

原来是这样,谢谢你啦!
我还想问一下,如果前后台都写好了,准备上线自己的博客,因为服务器端的koa2只是一个简单的REST服务器,那么前后台的网页应该放哪?
还是直接修改koa2去render前后台的网页呢?

看你是前后端分离还是传统的MVC咯,前后端分离的话构建出静态资源用nginx代理即可,传统MVC还需要nginx额外配置端口的信息。前者的nginx可以参考本博客admin的部署nginx模板,后者可以参考本博客front的部署nginx文档,都在readme里有写

commented

谢谢!