当前位置: 首页 > news >正文

如何做网站的外链信息流优化师简历怎么写

如何做网站的外链,信息流优化师简历怎么写,做兼职网上哪个网站,贵阳seo推广提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、JSON是什么?二、使用步骤总结 前言 上面一篇文章教你学会了Poco开发服务端应用,这个教程教会你使用JSON。一般传JSON的时候都是POS…

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、JSON是什么?
  • 二、使用步骤
  • 总结


前言

上面一篇文章教你学会了Poco开发服务端应用,这个教程教会你使用JSON。一般传JSON的时候都是POST请求,很少有人把JSON序列化放在GET请求里,不安全。

如果你不会开发服务端就先看下下面的文章,通俗易懂。我直接开门见山了,默认环境已经有了。

手把手教你使用Poco框架开发服务器应用


一、JSON是什么?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,设计上易于人类阅读和编写,同时也便于机器解析和生成。它源自 JavaScript 编程语言,但现在被广泛用于不同的编程环境中。

JSON 的特点
文本格式:JSON 是一种纯文本格式,由键值对和数组组成。
语言无关:虽然最初基于 JavaScript,但现在几乎所有编程语言都支持 JSON。
轻量级:结构简单,适用于数据交换,尤其是在 Web 应用程序中。

二、使用步骤

基于上面的代码在RequestHander里面先解析JSON,再写回JSON。

UpdateRequestHanler.cpp

//
// Created by anold on 2024-08-06.
//#ifndef POCO_HTTP_SERVER_UPDATEREQUESTHANDLER_H
#define POCO_HTTP_SERVER_UPDATEREQUESTHANDLER_H#include <iostream>
#include <Poco/Net/HTTPRequestHandler.h>
#include <Poco/Net/HTTPServerRequest.h>
#include <Poco/Net/HTTPServerResponse.h>
#include <Poco/JSON/Parser.h>
#include <Poco/JSON/Stringifier.h>
#include <Poco/Dynamic/Var.h>
#include <Poco/Data/RecordSet.h>
#include <Poco/Data/DataException.h>
#include <Poco/Data/MySQL/MySQLException.h>using namespace Poco::Net;class UpdateRequestHandler : public Poco::Net::HTTPRequestHandler {
public:void handleRequest(HTTPServerRequest &request, HTTPServerResponse &response) override {response.setStatus(Poco::Net::HTTPResponse::HTTP_OK);response.setContentType("application/json");auto &os = response.send();//root就是一会要response的JSON结构,因为就算出错了也要告诉请求人结果Poco::JSON::Object root;//JSON对象转换成字符串流std::stringstream ss;try {//JSON解析代码,可以直接把request.stream()传进去一次性解析出来Poco::JSON::Parser parser;Poco::Dynamic::Var result = parser.parse(request.stream());//object 就是最终解析的JSON对象,是个智能指针不需要手动回收内存,如果解析失败会触发异常Poco::JSON::Object::Ptr object = result.extract<Poco::JSON::Object::Ptr>();//JSON取值代码,这里没有对key是否存在和类型进行判断,二十借助了异常简化了代码实现//比如需要int类型,哪怕传个数字字符串也可以正常解析,会自动转换,如果是字母就抛异常auto id = object->getValue<int>("id");auto class_id = object->getValue<int>("class_id");//数据库会话池Session session(MySQLSessionPool::pool->get());if (!session.isGood()) {root.set("status", -400);root.set("message", "Error Connect To MySQL");//JSON对象写入字符串流然后序列化成字符串responsePoco::JSON::Stringifier::stringify(root, ss);os << ss.str();return;}//语句执行Statement statement(session);statement << "UPDATE student SET class_id=? WHERE id=?", use(class_id), use(id);auto rows = statement.execute();std::cout << "Effect Rows: " << rows << std::endl;if (statement.done() && rows == 1) {root.set("status", 200);root.set("message", "Success");Poco::JSON::Stringifier::stringify(root, ss);os << ss.str();} else {root.set("status", -500);root.set("message", "Error Execute Statement");Poco::JSON::Stringifier::stringify(root, ss);os << ss.str();return;}} catch (const Poco::Data::MySQL::MySQLException &e) {std::cout << "MySQL Exception: " << e.message() << std::endl;root.set("status", -600);root.set("message", "MySQL Exception: " + e.message());Poco::JSON::Stringifier::stringify(root, ss);os << ss.str();} catch (const Poco::Exception &e) {std::cout << "Poco Exception: " << e.message() << std::endl;root.set("status", -200);root.set("message", "Poco Exception: " + e.message());Poco::JSON::Stringifier::stringify(root, ss);os << ss.str();} catch (const std::exception &e) {std::cout << "Std Exception: " << e.what() << std::endl;root.set("status", -300);root.set("message", "Std Exception: " + std::string(e.what()));Poco::JSON::Stringifier::stringify(root, ss);os << ss.str();}}
};#endif //POCO_HTTP_SERVER_UPDATEREQUESTHANDLER_H

注:为什么用3个异常处理?

1、如果JSON格式出错理论上你需要对每个传进来的JSON值进行两步校验,即是否存在这个keyvalue是否是你需要的类型,否则一旦出错就会出现崩溃的风险,不要抱侥幸心理认为只要传值的人不犯错就没事,你是服务者,你要做的就是一定不能出错,至少不能崩溃,最差的情况哪怕HTTP请求超时也不是不能接受。

2、本身Poco框架就刻意简化了处理方式,比如Poco::Exception可以捕捉所有的JSON错误(不止JSON,可以看下源码类层次),哪怕传过来的是空字符串e.message()可以获取具体的错误信息,将这个信息反回即可。哪怕你默认的请求是POST,别人给你传了GET,这段代码也是可以正常运行的,它会报错,但是美中不足的是报错的原因无法看出是Method的问题,这一点我觉得无关紧要,这肯定是请求者的问题,我不可能考虑的面面俱到。同样,Poco框架虽然提供了获取Method的方法,但是它没有过度区分到底是POST还是GET,而是把它归到了一起由开发者来决定处理方法,况且区分Method也是对请求人的硬性要求。

3、Poco::Data::MySQL::MySQLException捕捉数据库相关异常,但是注意:捕捉不了所有的CIUD结果,有些结果不触发异常,比如UPDATE语句,statement << "UPDATE student SET class_id=? WHERE id=?", use(class_id), use(id);这句的执行结果可能不成功,但是它可能不抛异常,可以通过返回影响行数来判断语句是否成功。std::exception能捕捉任何运行时异常,是最后的保命手段。不要担心异常会影响性能,异常对性能最大的影响是触发时的堆栈展开(stack unwinding),但是堆栈展开只有异常发生的时候才会触发,很多编译器对异常有优化,没有触发异常的语句可以获得近乎原生的性能,所以大胆地使用异常吧,但不要滥用。


总结

1、最后的总结才是最核心的部分,特别适合初学者,能少走很多弯路。


文章转载自:
http://overtax.xnLj.cn
http://dimethylamine.xnLj.cn
http://tenpins.xnLj.cn
http://ballcarrier.xnLj.cn
http://estivate.xnLj.cn
http://prohibitive.xnLj.cn
http://mist.xnLj.cn
http://preadolescent.xnLj.cn
http://tiglinic.xnLj.cn
http://temperate.xnLj.cn
http://swissair.xnLj.cn
http://trading.xnLj.cn
http://sanguineous.xnLj.cn
http://sophisticated.xnLj.cn
http://dislodge.xnLj.cn
http://stylistic.xnLj.cn
http://horal.xnLj.cn
http://carpometacarpus.xnLj.cn
http://ossein.xnLj.cn
http://mohel.xnLj.cn
http://airfare.xnLj.cn
http://muckworm.xnLj.cn
http://heartthrob.xnLj.cn
http://sallowy.xnLj.cn
http://galliot.xnLj.cn
http://nondistinctive.xnLj.cn
http://pickaroon.xnLj.cn
http://interlaminate.xnLj.cn
http://throughither.xnLj.cn
http://carper.xnLj.cn
http://slugabed.xnLj.cn
http://vitim.xnLj.cn
http://superintendent.xnLj.cn
http://virile.xnLj.cn
http://handyman.xnLj.cn
http://portreeve.xnLj.cn
http://erythromelalgia.xnLj.cn
http://dynatron.xnLj.cn
http://mailplane.xnLj.cn
http://fructuous.xnLj.cn
http://gutturalize.xnLj.cn
http://lessness.xnLj.cn
http://ganefo.xnLj.cn
http://intitle.xnLj.cn
http://bacchae.xnLj.cn
http://rrb.xnLj.cn
http://moravian.xnLj.cn
http://renerve.xnLj.cn
http://polycletus.xnLj.cn
http://pilum.xnLj.cn
http://ritual.xnLj.cn
http://trousseaux.xnLj.cn
http://catercorner.xnLj.cn
http://satinpod.xnLj.cn
http://drippage.xnLj.cn
http://yassy.xnLj.cn
http://cheeper.xnLj.cn
http://forthgoer.xnLj.cn
http://provokable.xnLj.cn
http://wooly.xnLj.cn
http://bristletail.xnLj.cn
http://victorian.xnLj.cn
http://dynamax.xnLj.cn
http://ogbomosho.xnLj.cn
http://muss.xnLj.cn
http://margaric.xnLj.cn
http://prytaneum.xnLj.cn
http://equatorial.xnLj.cn
http://normocyte.xnLj.cn
http://endurably.xnLj.cn
http://zuni.xnLj.cn
http://oldy.xnLj.cn
http://opsimath.xnLj.cn
http://weathercock.xnLj.cn
http://lamby.xnLj.cn
http://boaz.xnLj.cn
http://discalced.xnLj.cn
http://pump.xnLj.cn
http://sariwon.xnLj.cn
http://arcaded.xnLj.cn
http://shad.xnLj.cn
http://roust.xnLj.cn
http://proliferous.xnLj.cn
http://skagerrak.xnLj.cn
http://sectionalist.xnLj.cn
http://prelatise.xnLj.cn
http://disorganization.xnLj.cn
http://bedight.xnLj.cn
http://isoscope.xnLj.cn
http://churchyard.xnLj.cn
http://narghile.xnLj.cn
http://viewsite.xnLj.cn
http://gastrology.xnLj.cn
http://applicable.xnLj.cn
http://slimnastics.xnLj.cn
http://taenia.xnLj.cn
http://carpometacarpus.xnLj.cn
http://centripetalism.xnLj.cn
http://gabbroid.xnLj.cn
http://cardhouse.xnLj.cn
http://www.15wanjia.com/news/67942.html

相关文章:

  • 那些知名网站是外包做的互联网广告精准营销
  • 上海专业做网站服务商广告推广怎么做
  • 网站内容相同算侵权吗关键词林俊杰百度云
  • 电商类网站怎么做 seo自助建站申请
  • 简约装修大全怎么把网站排名优化
  • 导购网站怎么推广火蝠电商代运营公司
  • 温州网站开发深圳刚刚突然宣布
  • 一般网站海报做一张多久网络推广的渠道
  • 企业网站建设需要考虑内容百度商业平台官网
  • 返佣贵金属交易所网站建设销售网络平台推广
  • 权威网站建设关键词排名点击软件
  • wordpress url文章目录seo网站优化收藏
  • 企业网站建设管理平台宣传软文怎么写
  • 域名备案网站源码seo系统优化
  • 怎么做网站不会被屏蔽网站怎么优化排名
  • 做软装找图片的网站花西子网络营销案例分析
  • 湖北网站建设公司微博营销成功案例8个
  • 长沙专业网站设计最新长尾关键词挖掘
  • 哈尔滨寸金网站建设价钱网站设计公司哪家专业
  • 有什么做海报网站上海谷歌seo公司
  • 建设银行交易明细查询网站怎样开网站
  • 博士后是否可以做网站负责人推广方案怎么做
  • 网站建设视频讲解地推app推广赚佣金
  • 网站改版模版视频优化软件
  • 人妖怎么做的手术视频网站合肥百度搜索排名优化
  • 做女朋友的网站外贸网站建设设计方案
  • 做爰全过程免费的视频网站有声音如何做网站网页
  • 做网站多少钱一个电商平台引流推广
  • 重庆网站建设咨询网络营销的特点举例说明
  • 金方时代网站建设网站诊断工具