前端报错时如何排查问题
Posted 他还在坚持嘛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端报错时如何排查问题相关的知识,希望对你有一定的参考价值。
前端页面报错:
1、页面报错500,首先我们可以知道是服务端的问题,需要去看下服务端的报错信息:
2、首先我们查看下前端是否给后端传了id:
我们可以看到接口是把ID返回了,就需要再看下p_id是什么情况了
3、我们再次请求,把p_id进行打印,看下具体是什么:
put接口代码
class PutView(BaseView): def put(self, request): # Django 并没有处理PUT数据,不可以使用request.PUT # 实际put传过来的数据是在request.body中,而获取到的数据是:b\'name=%E5%8F%82%E6%95%B06&desc=%E5%8F%82%E6%95%B06%E6%8F%8F%E8%BF%B0&value=100866\' # 需要导入 from django.http import QueryDict,QueryDict(request.body) 处理下 # 更新数据:需要告知是具体更新哪一条数据 # 获取要更新哪条数据的主键id p_id = request.PUT.get(\'id\') print(\'p_id\',p_id) # 通过id 从数据库中取这条数据 obj data_obj = self.model.objects.get(id=p_id) # 第一个参数:前端传过来的数据 # 第二个参数(instance):数据库获取的,要更新的对象 form_obj = self.form(request.PUT, instance=data_obj) if form_obj.is_valid(): # 通过 form中的save方法进行数据更新 form_obj.save() return NbResponse() # return JsonResponse("code": 200, "msg": "put接口数据更新成功") else: return NbResponse(code=500,msg=form_obj.errors.get_json_data())
middle_wares.py
class PutMethodMiddleware(MiddlewareMixin): def process_request(self, request): # 请求过来之后,先走到这里 if request.method == \'PUT\': request.PUT = QueryDict(request.body)
分析:因Django中没有PUT 方法,是我们在 middle_wares.py 中分装了后实现的PUT 方法,所以我们就需要看下【QueryDict(request.body)】返回的是什么:
class PutMethodMiddleware(MiddlewareMixin): def process_request(self, request): # 请求过来之后,先走到这里 if request.method == \'PUT\': print(\'QueryDict(request.body)===\',QueryDict(request.body)) request.PUT = QueryDict(request.body)
结果:
QueryDict(request.body)=== <QueryDict: \'------WebKitFormBoundarycRPtgGxEmmEAlBmC\\r\\nContent-Disposition: form-data\': [\'\'], \' name\': [\'"name"\\r\\n\\r\\n继 续测试111\\r\\n------WebKitFormBoundarycRPtgGxEmmEAlBmC\\r\\nContent-Disposition: form-data\', \'"value"\\r\\n\\r\\n继续测试\\r\\n------WebKitFormBoundarycRPtgGxEmm EAlBmC\\r\\nContent-Disposition: form-data\', \'"desc"\\r\\n\\r\\n继续测试\\r\\n------WebKitFormBoundarycRPtgGxEmmEAlBmC\\r\\nContent-Disposition: form-data\', \'"id" \\r\\n\\r\\n19\\r\\n------WebKitFormBoundarycRPtgGxEmmEAlBmC--\\r\\n\']>
我们可以发现数据格式并不是我们以往的那样,我就需要回到前端中查看下【Request Headers】中的信息:
Content-Type发生了变化,所以传过来的数据也发生了变化,所以后端代码就需要把代码进行调整,兼容这种传递的方式
查验源码后,进行调整:
class PutMethodMiddleware(MiddlewareMixin): @staticmethod def process_request(self, request): # 请求过来之后先走到这里,然后再去请求视图 if request.method == \'PUT\': if \'boundary\' in request.content_params.kes(): put_data,files = request.parse_file_upload(request.MEAT,request) request.PUT = put_data request._files = files # 是因为request.FILES 里面取值的时候,就是_files else: request.PUT = QueryDict(request.bady)
已可正常修改无报错:
本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/17300627.html
pm2 观察报错时 pm2 start app.js --watch
pm2 start app.js --watch
[PM2][ERROR] Script already launched, add -f option to force re-execution
以上是关于前端报错时如何排查问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在kettle报错时终止运行的同时将错误日志输出到数据库中
Failed to convert property value of type ‘java.lang.String‘ to required type ‘int‘ for property
编译器编译报错时aka是什么意思?(also known as)
Failed to convert property value of type ‘java.lang.String‘ to required type ‘int‘ for property(代码片段