Node实践总结3——routes

routes

一个传统的网站往往会有许多路径(/,/login,/user),不同的路径对应不同的页面,有不同的处理逻辑,涉及表单的页面往往还会同时存在getpost两种形式的请求,其往往也承担了核心的业务。


routes结构

GET

先摘一段我工程的代码举个例子:

router.get('/', async function (ctx, next) {
  await ctx.render('index', {
    title: 'OA',
    user: ctx.session.user
  });
});
router.get('/reg', async function (ctx, next) {
  await ctx.render('reg', {
    title: 'OA-注册'
  });
});
router.get('/login', async function (ctx, next) {
  await ctx.render('login', {
    title: 'OA-登录'
  });
});
router.get('/logout', async function (ctx, next) {
  ctx.session.user = null;
  return ctx.redirect('/');
});
router.get('/user_app', async function (ctx, next) {
  await ctx.render('user_app', {
    title: 'OA-应用角色管理'
  });
});
router.get('/user_db', async function (ctx, next) {
  await ctx.render('user_db', {
    title: 'OA-数据库角色管理'
  });
});
router.get('/waf_log', async function (ctx, next) {
  var wafLogs = await WafLogs.fetchAll();//从数据库中查询所有的日志信息
  var logs = {};
  for(var i = 0;i < wafLogs.length;i++){
    logs[i] = wafLogs.models[i].attributes;
  }

  await ctx.render('waf_log', {
    title: 'OA-waf日志',
    logs: logs
  });
});

这一部分基本都是简单的get页面的请求,koa使用ctx.render(模板名,{模板需要的变量})做页面渲染,第一个参数指定要使用哪一个模板文件作为返回的页面,第二个参数用于传入变量给jade模板使用。

GET请求时,通常需要服务器返回一个静态页面,所以逻辑都还算比较简单,只需要指定好页面模板和相应的变量即可。

上述例子中,有一个GET /waf_log的route比较特别,这一个get请求需要服务器先查询存放日志的数据库,将日志信息保存成json格式,再由render函数传给模板进行渲染,下面将这一部分前后端的关键代码放在一起对比的看一下。

//后端
router.get('/waf_log', async function (ctx, next) {
  var wafLogs = await WafLogs.fetchAll();//从数据库中查询所有的日志信息
  var logs = {};
  for(var i = 0;i < wafLogs.length;i++){
    logs[i] = wafLogs.models[i].attributes;
  }

  await ctx.render('waf_log', {
    title: 'OA-waf日志',
    logs: logs
  });
});
//前端
doctype html
html
  head
    meta(charset='utf-8')
    title= title
    link(rel='stylesheet' href='http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css')
    link(rel='stylesheet' href='/stylesheets/mycss.css')
    script(src='http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js')
    script(src='http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js')
body
    div.container
      div.row
        ul.list-inline
          li.col-lg-3.nonpadding
            p.content-title WAF日志
          li.col-lg-6.nonpadding
          li.float-right.col-lg-3.nonpadding
            div.input-group
              input#searchBox.form-control(type='text',placeholder='输入关键字,支持模糊查询',required)
              span.input-group-btn
                input.btn.btn-warning.btn-search(type='submit',value='搜索') 
      div#table.row
        table.table
          thead
            tr
              th 序号(id)
              th 时间(time)
              th 用户名(username)
              th 访问的功能(function
              th 访问的URL(url)
              th 参数(param)
              th 操作结果(result)
          tbody
            each log in logs
              tr
              each val in log
                td #{val} 

可以看到后端传给模板两个参数{title: 'OA-waf日志',logs: logs}
模板中title= title,说明前端页面中</code>标签内容是一个变量,值是传入的title参数的值, <br> 模板中<code>tbody</code>下是两个each循环,用于将传入的logs解析出来,动态的生成表格。</p> <p><code>async</code>和<code>await</code>是ES7标准中用于处理异步操作的关键字,<code>async</code>声明的函数A中可以使用<code>await</code>调用别的函数B,并等到函数B返回之后继续执行A剩余的部分。</p> <p><code>ctx</code>是koa2中包装<code>req</code>和<code>res</code>的对象。</p> <p><code>next</code>用于链式操作,指代当前函数的下一个函数,常常通过<code>await next()</code>调用。</p> <hr> <h2 id="post">POST</h2> <p>下面这一部分的routes相对复杂一些:</p> <pre class="prettyprint"><code class=" hljs cs">router.post(<span class="hljs-string">'/reg'</span>, <span class="hljs-keyword">async</span> function (ctx, next) { <span class="hljs-keyword">if</span>(ctx.request.body[<span class="hljs-string">'username'</span>].length > <span class="hljs-number">25</span>) { <span class="hljs-comment">//判断用户名是否过长,数据库设置username字段为varchar(25)</span> <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'reg'</span>, { title: <span class="hljs-string">'OA-注册'</span>, error: <span class="hljs-string">'用户名不得超过25个字符'</span> }); } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(ctx.request.body[<span class="hljs-string">'password2'</span>] !== ctx.request.body[<span class="hljs-string">'password'</span>]) { <span class="hljs-comment">//判断两次密码是否一致</span> console.log(<span class="hljs-string">'两次密码不一致'</span>); <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'reg'</span>, { title: <span class="hljs-string">'OA-注册'</span>, error: <span class="hljs-string">'两次密码不一致'</span> }); } <span class="hljs-keyword">else</span> { <span class="hljs-comment">//判断用户名是否存在</span> <span class="hljs-keyword">var</span> count = <span class="hljs-keyword">await</span> Users.<span class="hljs-keyword">where</span>(<span class="hljs-string">'username'</span>, ctx.request.body[<span class="hljs-string">'username'</span>]).count(<span class="hljs-string">'username'</span>); <span class="hljs-keyword">if</span>(count != <span class="hljs-number">0</span>) { console.log(<span class="hljs-string">'用户名已存在!'</span>); <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'reg'</span>, { title: <span class="hljs-string">'OA-注册'</span>, error: <span class="hljs-string">'用户名已存在'</span> }); } <span class="hljs-keyword">else</span> { <span class="hljs-keyword">var</span> hmac = crypto.createHmac(<span class="hljs-string">'sha256'</span>, <span class="hljs-string">'liuyueyi'</span>); <span class="hljs-keyword">var</span> password = hmac.update(ctx.request.body[<span class="hljs-string">'password'</span>]).digest(<span class="hljs-string">'hex'</span>); console.log(password); console.log(password.length); <span class="hljs-keyword">var</span> newUser = <span class="hljs-keyword">new</span> Users({ username: ctx.request.body[<span class="hljs-string">'username'</span>], password: password }); <span class="hljs-keyword">await</span> newUser.save(); console.log(<span class="hljs-string">'注册成功,可以直接登录!'</span>); ctx.session.user = newUser; <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'reg'</span>, { title: <span class="hljs-string">'OA-注册'</span>, success: <span class="hljs-string">'注册成功,可以直接登录'</span> }); <span class="hljs-keyword">return</span> ctx.redirect(<span class="hljs-string">'/login'</span>); } } }); router.post(<span class="hljs-string">'/login'</span>, <span class="hljs-keyword">async</span> function (ctx, next) { <span class="hljs-comment">//需要判断的逻辑:用户名不存在或者密码错误</span> <span class="hljs-keyword">var</span> count = <span class="hljs-keyword">await</span> Users.<span class="hljs-keyword">where</span>(<span class="hljs-string">'username'</span>, ctx.request.body[<span class="hljs-string">'username'</span>]).count(<span class="hljs-string">'username'</span>); <span class="hljs-keyword">if</span>(count == <span class="hljs-number">0</span>) { console.log(<span class="hljs-string">'用户名不存在!'</span>); <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'login'</span>, { title: <span class="hljs-string">'OA-登录'</span>, error: <span class="hljs-string">'用户名不存在'</span> }); } <span class="hljs-keyword">else</span> { <span class="hljs-keyword">var</span> hmac = crypto.createHmac(<span class="hljs-string">'sha256'</span>, <span class="hljs-string">'liuyueyi'</span>); <span class="hljs-keyword">var</span> password = hmac.update(ctx.request.body[<span class="hljs-string">'password'</span>]).digest(<span class="hljs-string">'hex'</span>); <span class="hljs-keyword">var</span> user = <span class="hljs-keyword">await</span> Users.<span class="hljs-keyword">where</span>(<span class="hljs-string">'username'</span>, ctx.request.body[<span class="hljs-string">'username'</span>]).fetch(); <span class="hljs-keyword">if</span> (user.attributes.password == password) { console.log(<span class="hljs-string">'登陆成功!'</span>+ user.attributes.username); ctx.session.user = user.attributes.username; <span class="hljs-keyword">return</span> ctx.response.redirect(<span class="hljs-string">'/'</span>); } <span class="hljs-keyword">else</span> { console.log(<span class="hljs-string">'密码错误!'</span>); <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'login'</span>, { title: <span class="hljs-string">'OA-登录'</span>, error: <span class="hljs-string">'密码错误'</span> }); } } });</code></pre> <p>这一部分是处理前端post回来的表单数据的逻辑代码。</p> <hr> <h2 id="render和redirect">render和redirect</h2> <p>上面的代码中,页面切换使用到了两种方法</p> <ul> <li>render</li> <li>redirect</li> </ul> <p>二者是有区别的。</p> <p>render用于页面渲染,是将指定的模板通过引擎转换成html之后直接画在当前页面之上,如果render指定的模板和当前页不同,地址栏上可以清晰的看见路径没有变化。 <br> redirect则是用于页面跳转,服务器端的后台可以看到跳转的时候响应码是302,并且地址栏的路径也会变化。</p> <hr> <h2 id="ajax">AJAX</h2> <p>这一部分我之后单独写。</p> <hr> <p>routes代码可以直接写在app.js当中,但是当业务越来越复杂,页面越来越多的时候,app.js会变得很长,从而不易维护,所以正确的做法是将其移到routes路径下,做成一个模块,使用的时候导入到app.js中。</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1306287336685867008"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(Node.js,node,route)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835027774545424384.htm" title="k3s原理分析丨如何搞定k3s node注册失败问题" target="_blank">k3s原理分析丨如何搞定k3s node注册失败问题</a> <span class="text-muted">k3s中文社区</span> <div>前言面向边缘的轻量级K8S发行版k3s于去年2月底发布后,备受关注,在发布后的10个月时间里,GithubStar达11,000颗。于去年11月中旬已经GA。但正如你所知,没有一个产品是十全十美的,k3s在客户落地实践的过程中也暴露过一些不足。在k3s技术团队的专业技术支持下,许多问题得到了改善和解决。我们精选了一些在实际生产环境中的问题处理案例,分享给正在使用k3s的你。希望k3s技术团队的经验</div> </li> <li><a href="/article/1835026964080062464.htm" title="计算机毕业设计Node.js+Vue基于Java的医院预约挂号系统(程序+源码+LW+部署)" target="_blank">计算机毕业设计Node.js+Vue基于Java的医院预约挂号系统(程序+源码+LW+部署)</a> <span class="text-muted">Nodejs洋洋 程序</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a> <div>该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:Node.js+Vscode+Mysql5.7+HBuilderX+Navicat11+Vue+Express。项目技术:Express框架+Node.js+Vue等等组成,B/S模式+Vscode管理+前后端分离等等。环境需要1.运行环境:最好是Nodejs最新版,我们在这个版本上开发的。其他版本理论上也可</div> </li> <li><a href="/article/1835019650895802368.htm" title="python基于django/flask的NBA球员大数据分析与可视化python+java+node.js" target="_blank">python基于django/flask的NBA球员大数据分析与可视化python+java+node.js</a> <span class="text-muted">QQ_511008285</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a> <div>前端开发框架:vue.js数据库mysql版本不限后端语言框架支持:1java(SSM/springboot)-idea/eclipse2.Nodejs+Vue.js-vscode3.python(flask/django)--pycharm/vscode4.php(thinkphp/laravel)-hbuilderx数据库工具:Navicat/SQLyog等都可以本文针对NBA球员的大数据进行</div> </li> <li><a href="/article/1835019524521422848.htm" title="Java基于spring boot的国产电影数据分析与可视化python+java+node.js" target="_blank">Java基于spring boot的国产电影数据分析与可视化python+java+node.js</a> <span class="text-muted">QQ_511008285</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a> <div>前端开发框架:vue.js数据库mysql版本不限后端语言框架支持:1java(SSM/springboot)-idea/eclipse2.Nodejs+Vue.js-vscode3.python(flask/django)--pycharm/vscode4.php(thinkphp/laravel)-hbuilderx数据库工具:Navicat/SQLyog等都可以  该系统使用进行大数据处理和</div> </li> <li><a href="/article/1835014283524665344.htm" title="黄狄樊实训项目1.2.3" target="_blank">黄狄樊实训项目1.2.3</a> <span class="text-muted">明年的牛肉干</span> <div>.安装nodejs2.安装git3.下载vue-element-admin建议本项目的定位是后台集成方案,不太适合当基础模板来进行二次开发。因为本项目集成了很多你可能用不到的功能,会造成不少的代码冗余。如果你的项目不关注这方面的问题,也可以直接基于它进行二次开发。集成方案:vue-element-admin基础模板:vue-admin-template桌面终端:electron-vue-admin</div> </li> <li><a href="/article/1834982577723764736.htm" title="深入链表的遍历——快慢指针算法(LeetCode——876题)" target="_blank">深入链表的遍历——快慢指针算法(LeetCode——876题)</a> <span class="text-muted">欺霜</span> <a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>今天我们一起来学习一下一个快速遍历链表的方法我们先来看看一道经典的需要遍历链表的题目(题目来自LeetCode)876.链表的中间结点https://leetcode.cn/problems/middle-of-the-linked-list/给你单链表的头结点head,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。普通方法publicListNodemiddleNode</div> </li> <li><a href="/article/1834962276646481920.htm" title="unocss 一直热更新打印[vite] hot updated: /__uno.css" target="_blank">unocss 一直热更新打印[vite] hot updated: /__uno.css</a> <span class="text-muted">柳雾青烟紫燕穿</span> <a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a> <div>控制台持续打印了几千条这条信息,页面逐渐卡死client.ts:450[vite]hotupdated:/__uno.css找出的原因是:依赖出问题了,重新安装unocss,执行命令npmiunocss后修复。但奇怪的是,删除node_modules重新全部安装依赖却不能修复,tmd。还有一种解决方法是切换分支,切去其它分支,再切回来,也不会再打印了。一开始还怀疑了是哪里的unocss类名一直在监</div> </li> <li><a href="/article/1834919912410279936.htm" title="Tapable" target="_blank">Tapable</a> <span class="text-muted">信海利世</span> <a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>一、Tapable是什么?Tapable是一个类似于Node.js的EventEmitter的库,主要是控制钩子函数的发布与订阅,控制着webpack的插件系统。Tapable库暴露了很多Hook(钩子)类,为插件提供挂载的钩子const{SyncHook,//同步钩子SyncBailHook,//同步熔断钩子即return一个非undefined的值,则不再继续执行后面的监听函数SyncWate</div> </li> <li><a href="/article/1834919786136563712.htm" title="基于nodejs+vue的美妆彩妆网站的设计与实现(源码+LW+调试文档+讲解等)" target="_blank">基于nodejs+vue的美妆彩妆网站的设计与实现(源码+LW+调试文档+讲解等)</a> <span class="text-muted">程序员gelei</span> <a class="tag" taget="_blank" href="/search/nodejs%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1%E9%A1%B9%E7%9B%AE/1.htm">nodejs毕业设计项目</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>目录:博主介绍:完整视频演示:系统技术介绍:后端Java介绍前端框架Vue介绍具体功能截图:部分代码参考:Mysql表设计参考:项目测试:项目论文:为什么选择我:源码获取:博主介绍:博主:程序员gelei:全网拥有20W+粉丝、CSDN作者、博客专家、全栈领域优质创作者、平台优质Java创作者、专注于Java、小程序、python、安卓技术领域和毕业项目实战✌Java精品实战案例《1000套》20</div> </li> <li><a href="/article/1834900635116466176.htm" title="Ubuntu虚拟机在node命令行中编译.sol文件报错:{“errors“:[{“component“:“general“,“formattedMessage“...(已解决)" target="_blank">Ubuntu虚拟机在node命令行中编译.sol文件报错:{“errors“:[{“component“:“general“,“formattedMessage“...(已解决)</a> <span class="text-muted">拔牙不打麻药</span> <a class="tag" taget="_blank" href="/search/%E7%96%91%E9%9A%BE%E6%9D%82%E7%97%87/1.htm">疑难杂症</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a><a class="tag" taget="_blank" href="/search/node/1.htm">node</a> <div>Ubuntu虚拟机在node命令行下编译.sol文件报错'{"errors":[{"component":"general","formattedMessage":"*Line1,Column1\\nSyntaxerror:value,objectorarrayexpected.\\n*Line1,Column2\\nExtranon-whitespaceafterJSONvalue.\\n","</div> </li> <li><a href="/article/1834895337072979968.htm" title="linux 中删除乱码中文名文件" target="_blank">linux 中删除乱码中文名文件</a> <span class="text-muted">痕忆丶</span> <a class="tag" taget="_blank" href="/search/%E7%AE%80%E5%8D%95%E6%95%99%E7%A8%8B/1.htm">简单教程</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>在操作linux时会不经意将带有中文的文件发送到linux系统,但是有些linux系统不能识别中文以及中文符号等,会导致linuxshell命令无法操作这些文件想要删除无法识别名字的文件,需要找到其inode号,通过inode删除文件整体操作分为两条指令ls-ifind.-inuminode号-execrm{}\;具体操作如图</div> </li> <li><a href="/article/1834858024540401664.htm" title="npm dev时遇到错误“error:0308010C:digital envelope routines::unsupported“的解决办法" target="_blank">npm dev时遇到错误“error:0308010C:digital envelope routines::unsupported“的解决办法</a> <span class="text-muted">_Eolin</span> <a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>报错:opensslErrorStack:['error:03000086:digitalenveloperoutines::initializationerror'], library:'digitalenveloperoutines', reason:'unsupported', code:'ERR_OSSL_EVP_UNSUPPORTED'顺便看了一下错误堆栈,发现是一个Node的内核文件抛</div> </li> <li><a href="/article/1834845171464892416.htm" title="antd of vue treeSelect——异步加载" target="_blank">antd of vue treeSelect——异步加载</a> <span class="text-muted">who_become_gods</span> <div>onLoadData(treeNode){varthat=thisreturnnewPromise((resolve)=>{if(treeNode.</div> </li> <li><a href="/article/1834840000068415488.htm" title="treeselect只选了分支节点全选_vue Treeselect 树形下拉框:获取选中节点的ids和lables操作..." target="_blank">treeselect只选了分支节点全选_vue Treeselect 树形下拉框:获取选中节点的ids和lables操作...</a> <span class="text-muted">weixin_39637285</span> <div>API:https://vue-treeselect.js.org/#events1.ids:即value1.lable:需要用到方法:@select(node,instanceId)和@deselect(node,instanceId)v-model="DRHA_EFaultModeTree_value":multiple="true":options="DRHA_EFaultModeTree_</div> </li> <li><a href="/article/1834834957567094784.htm" title="解决nodejs mysql Error: Connection lost The server closed the connection" target="_blank">解决nodejs mysql Error: Connection lost The server closed the connection</a> <span class="text-muted">echozzi</span> <a class="tag" taget="_blank" href="/search/node/1.htm">node</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>Node连接MySql,会出现几分钟无动作则自动关闭连接,导致Node服务器Down掉。报错信息:解决方法:将sql文件修改为连接池的写法,查询语句也是。参考链接:https://www.npmjs.com/package/mysql2具体实现:原连接写法(db.js):写法没错,但因为数据库无操作断开机制所以还是有问题。看了其他的博客,尝试做了异常处理,还是会出现报错。constmysql=re</div> </li> <li><a href="/article/1834832183529926656.htm" title="用前端的语言写后端——Node.js之Express" target="_blank">用前端的语言写后端——Node.js之Express</a> <span class="text-muted">tabzzz</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/express/1.htm">express</a> <div>ExpressExpress是一种流行的模型视图控制器(MVC)Node.js框架,具有快速、极简和灵活的优点,为Web和移动应用程序开发提供了强大的功能集合。最受欢迎的Node.js框架!文章目录Express安装ExpressHelloWorld路由中间件全局中间件应用中间件开放跨域请求几种常用的Express内置中间件函数1.JSON格式数据中间件函数2.静态文件中间件函数3.路由中间件函数</div> </li> <li><a href="/article/1834831424239267840.htm" title="一文说透 Android 应用架构 MVC、MVP、MVVM 和 组件化,Android基础入门教程" target="_blank">一文说透 Android 应用架构 MVC、MVP、MVVM 和 组件化,Android基础入门教程</a> <span class="text-muted">Java后时代</span> <a class="tag" taget="_blank" href="/search/2024%E5%B9%B4%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AD%A6%E4%B9%A0/1.htm">2024年程序员学习</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a> <div>然后,就是我们的View层的代码,同样,我对代码做了删减:@Route(path=BaseConstants.EYEPETIZER_MENU)publicclassHomeActivityextendsCommonActivityimplementsHomeContract.IView{//实例化PresenterprivateHomeContract.IPresenterpresenter;{p</div> </li> <li><a href="/article/1834800037679427584.htm" title="K8S - Volume - NFS 卷的简介和使用" target="_blank">K8S - Volume - NFS 卷的简介和使用</a> <span class="text-muted">nvd11</span> <a class="tag" taget="_blank" href="/search/K8S/1.htm">K8S</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a> <div>在之前的文章里已经介绍了K8S中两个简单卷类型hostpath和emptydirk8s-Volume简介和HostPath的使用K8S-Emptydir-取代ELK使用fluentd构建loggingsaidcar但是这两种卷都有同1个限制,就是依赖于k8snodes的空间如果某个servicepod中需要的volumn空间很大,这时我们就需要考虑网络磁盘方案,其中NAS类型的Volume是常用且</div> </li> <li><a href="/article/1834793356543225856.htm" title="由于篇幅和复杂性限制,我无法在这里直接为你提供一个完整的、用多种编程语言实现的购物商城代码。但是,我可以为你概述如何使用几种流行的编程语言(如Python, JavaScript/Node.js, J" target="_blank">由于篇幅和复杂性限制,我无法在这里直接为你提供一个完整的、用多种编程语言实现的购物商城代码。但是,我可以为你概述如何使用几种流行的编程语言(如Python, JavaScript/Node.js, J</a> <span class="text-muted">NewmanEdwarda2</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>Python(后端,使用Flask或Django)Flask示例(后端API)gjijg.compythonfromflaskimportFlask,request,jsonifyapp=Flask(name)假设的数据库商品列表products=[{“id”:1,“name”:“苹果”,“price”:10.0},{“id”:2,“name”:“香蕉”,“price”:5.0},]@app.ro</div> </li> <li><a href="/article/1834792978640629760.htm" title="由于篇幅限制,我无法为每种编程语言都提供一个完整的游戏商城代码,但我可以为你提供几种常见编程语言的示例代码片段或概念性指导。" target="_blank">由于篇幅限制,我无法为每种编程语言都提供一个完整的游戏商城代码,但我可以为你提供几种常见编程语言的示例代码片段或概念性指导。</a> <span class="text-muted">NewmanEdwarda2</span> <a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a> <div>Python(使用Flask框架)yctsy.cnFlaskApp结构pythonfromflaskimportFlask,render_template,requestapp=Flask(name)假设有一个数据库或列表来存储商品games=[{“id”:1,“name”:“Game1”,“price”:9.99},#…其他游戏]@app.route(‘/’)defhome():returnre</div> </li> <li><a href="/article/1834784912461361152.htm" title="网络学习-eNSP配置VRRP" target="_blank">网络学习-eNSP配置VRRP</a> <span class="text-muted">丢爸</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>虚拟路由冗余协议(VirtualRouterRedundancyProtocol,简称VRRP)VRRP广泛应用在边缘网络中,是一种路由冗余协议,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以及即使在实际第一跳路由器使用失败的情形下仍能够维护路由器间的连通性。#配置三层交换机和路由器IP,实现PC1与PC2的通信#---------------------1</div> </li> <li><a href="/article/1834761216749301760.htm" title="LSP协议:技术创新背后的团队与愿景" target="_blank">LSP协议:技术创新背后的团队与愿景</a> <span class="text-muted">BTColdman1</span> <a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a> <div>随着去中心化金融(DeFi)和区块链技术的迅猛发展,创新性的项目层出不穷,LSP协议(LiquiditySlicingProtocolforNodeStaking)以其独特的技术优势和市场定位迅速成为行业焦点。在这背后,项目的成功离不开核心团队的领导与执行力,特别是CEOMichaelRey的卓越贡献。突破质押流动性瓶颈LSP协议作为全球首个专注于节点质押流动性的切片协议,其独特卖点在于实现了DP</div> </li> <li><a href="/article/1834751763526283264.htm" title="vue3打包 error in node_modules/@types/node/stream/web.d.ts 错误解决办法" target="_blank">vue3打包 error in node_modules/@types/node/stream/web.d.ts 错误解决办法</a> <span class="text-muted">柒先生~</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>ue3项目打包的时候突然报错,错误如下ERRORFailedtocompilewith1error14:13:57errorinnode_modules/@types/node/stream/web.d.ts:469:56TS1005:'?'expected.467|//IfReportingObservercheckisremoved,thetypeherewillformacircularre</div> </li> <li><a href="/article/1834745084323655680.htm" title="值得你学习的构建工具-Webpack5.0简化版--五大核心概念" target="_blank">值得你学习的构建工具-Webpack5.0简化版--五大核心概念</a> <span class="text-muted">双头雄狮</span> <a class="tag" taget="_blank" href="/search/%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7/1.htm">构建工具</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a> <div>一、Webpack是什么简单来说,webpack就是一个用于现代JavaScript应用程序的静态打包工具,打包过程:从入口文件开始,构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将这些所有模块打包,它们均为静态资源,用于展示你的内容。Webpack5运行于Node.jsv10.13.0+的版本。二、为什么使用Webpack在以前我们开发一个项目的时候,会出现很多.css、.js等类似的</div> </li> <li><a href="/article/1834743823390044160.htm" title="微信小程序集成前端日志库" target="_blank">微信小程序集成前端日志库</a> <span class="text-muted">人工智能的苟富贵</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">前端小程序</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>在微信小程序内接入日志库的记录在开发微信小程序时,为了更好地调试和维护代码,通常需要记录日志信息。我尝试了多种日志库,包括Winston、pion和loglevel,并最终选择了loglevel作为日志库,并实现了日志上传到服务器的功能。本文详细记录了这一过程,以供参考。使用Winston失败最初,我尝试在微信小程序中使用Winston日志库。然而,Winston依赖Node.js的部分核心模块(</div> </li> <li><a href="/article/1834738272555855872.htm" title="Vue Router push方法的使用" target="_blank">Vue Router push方法的使用</a> <span class="text-muted">hzw0510</span> <a class="tag" taget="_blank" href="/search/Vue/1.htm">Vue</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>VueRouterpush方法的使用this.$router.push是VueRouter提供的一个方法,用于在Vue.js应用中进行编程式导航。它的作用是将用户导航到应用中的不同路由。基本作用this.$router.push方法会在浏览器历史记录中添加一个新的记录,并导航到指定的路由。它的工作方式类似于点击一个组件,或者在浏览器中手动输入URL后点击回车。使用示例以下是一些使用this.$ro</div> </li> <li><a href="/article/1834700824790528000.htm" title="安卓将本地日志上传到服务器" target="_blank">安卓将本地日志上传到服务器</a> <span class="text-muted">胡子洲</span> <a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>在安卓开发中,将本地日志上传到服务器是一个常见的需求,特别是在开发需要远程监控或调试的应用时。以下是一个基本的步骤和示例,说明如何实现这一功能:1本地日志上传到服务器1.1准备服务器首先,你需要在服务器上设置一个接口,用于接收上传的日志文件。这个接口可以是RESTfulAPI,使用HTTPPOST方法接收文件。你可以使用各种后端技术栈来实现这个接口,如Node.js、Python(Flask或Dj</div> </li> <li><a href="/article/1834695026119110656.htm" title="力扣每日一题24:两两交换链表中的节点" target="_blank">力扣每日一题24:两两交换链表中的节点</a> <span class="text-muted">暴力递归战士</span> <a class="tag" taget="_blank" href="/search/LeetCode%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/1.htm">LeetCode每日一题</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1]提示:链表中节点的数目在范围[0,100]内0next)returnhead;structListNodeHead;</div> </li> <li><a href="/article/1834684571417931776.htm" title="【百日算法计划】:每日一题,见证成长(013)" target="_blank">【百日算法计划】:每日一题,见证成长(013)</a> <span class="text-muted">码上一元</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.htm">数据结构与算法</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>题目回文链表给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。输入:head=[1,2,2,1]输出:true思路找到中间节点反转后半部分链表前后链表顺序比对publicbooleanisPalindrome2(ListNodehead){if(head==null||head.next==null)returntrue;ListNodep=</div> </li> <li><a href="/article/1834681169359237120.htm" title="hdfs启动流程" target="_blank">hdfs启动流程</a> <span class="text-muted">weixin_44352020</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/hdfs/1.htm">hdfs</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>Namenode1.init()namenode初始化,执行加载配置文件等操作2.loadFsImage()开始加载元数据将FsImage护额徐为目录树,保存在内存中FsImage中主要包含了问价你和数据块的对应关系3.loadEditlog()加载Editlog,将Editlog中记录的元数据修改应用到内存中;4.saveCheckpoint()将内存中最新的目录树持久化为新的FsImage到磁</div> </li> <li><a href="/article/109.htm" title="统一思想认识" target="_blank">统一思想认识</a> <span class="text-muted">永夜-极光</span> <a class="tag" taget="_blank" href="/search/%E6%80%9D%E6%83%B3/1.htm">思想</a> <div>1.统一思想认识的基础,才能有的放矢  原因:    总有一种描述事物的方式最贴近本质,最容易让人理解.    如何让教育更轻松,在于找到最适合学生的方式.          难点在于,如何模拟对方的思维基础选择合适的方式.   &</div> </li> <li><a href="/article/236.htm" title="Joda Time使用笔记" target="_blank">Joda Time使用笔记</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/joda+time/1.htm">joda time</a> <div>Joda Time的介绍可以参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-jodatime.html 工作中也常常用到Joda Time,为了避免每次使用都查API,记录一下常用的用法:     /** * DateTime变化(增减) */ @Tes</div> </li> <li><a href="/article/363.htm" title="FileUtils API" target="_blank">FileUtils API</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/FileUtils/1.htm">FileUtils</a><a class="tag" taget="_blank" href="/search/FileUtils+API/1.htm">FileUtils API</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2217374 一、概述 这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的类FilenameUtils跟FileUtils,其中FilenameUtils是对文件名操作的封装;FileUtils是文件封装,开发中对文件的操作,几乎都可以在这个框架里面找到。 非常的好用。 </div> </li> <li><a href="/article/490.htm" title="各种新兴技术" target="_blank">各种新兴技术</a> <span class="text-muted">不懂事的小屁孩</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF/1.htm">技术</a> <div>1:gradle Gradle 是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。 现在构建系统常用到maven工具,现在有更容易上手的gradle, 搭建java环境: http://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/ 搭建android环境: http://m</div> </li> <li><a href="/article/617.htm" title="tomcat6的https双向认证" target="_blank">tomcat6的https双向认证</a> <span class="text-muted">酷的飞上天空</span> <a class="tag" taget="_blank" href="/search/tomcat6/1.htm">tomcat6</a> <div>1.生成服务器端证书 keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 36</div> </li> <li><a href="/article/744.htm" title="托管虚拟桌面市场势不可挡" target="_blank">托管虚拟桌面市场势不可挡</a> <span class="text-muted">蓝儿唯美</span> <div>用户还需要冗余的数据中心,dinCloud的高级副总裁兼首席营销官Ali Din指出。该公司转售一个MSP可以让用户登录并管理和提供服务的用于DaaS的云自动化控制台,提供服务或者MSP也可以自己来控制。 在某些情况下,MSP会在dinCloud的云服务上进行服务分层,如监控和补丁管理。 MSP的利润空间将根据其参与的程度而有所不同,Din说。 “我们有一些合作伙伴负责将我们推荐给客户作为个</div> </li> <li><a href="/article/871.htm" title="spring学习——xml文件的配置" target="_blank">spring学习——xml文件的配置</a> <span class="text-muted">a-john</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>在Spring的学习中,对于其xml文件的配置是必不可少的。在Spring的多种装配Bean的方式中,采用XML配置也是最常见的。以下是一个简单的XML配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.or</div> </li> <li><a href="/article/998.htm" title="HDU 4342 History repeat itself 模拟" target="_blank">HDU 4342 History repeat itself 模拟</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/%E6%A8%A1%E6%8B%9F/1.htm">模拟</a> <div>来源:http://acm.hdu.edu.cn/showproblem.php?pid=4342 题意:首先让求第几个非平方数,然后求从1到该数之间的每个sqrt(i)的下取整的和。 思路:一个简单的模拟题目,但是由于数据范围大,需要用__int64。我们可以首先把平方数筛选出来,假如让求第n个非平方数的话,看n前面有多少个平方数,假设有x个,则第n个非平方数就是n+x。注意两种特殊情况,即</div> </li> <li><a href="/article/1125.htm" title="java中最常用jar包的用途" target="_blank">java中最常用jar包的用途</a> <span class="text-muted">asia007</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>java中最常用jar包的用途 jar包用途axis.jarSOAP引擎包commons-discovery-0.2.jar用来发现、查找和实现可插入式接口,提供一些一般类实例化、单件的生命周期管理的常用方法.jaxrpc.jarAxis运行所需要的组件包saaj.jar创建到端点的点到点连接的方法、创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法.  w</div> </li> <li><a href="/article/1252.htm" title="ajax获取Struts框架中的json编码异常和Struts中的主控制器异常的解决办法" target="_blank">ajax获取Struts框架中的json编码异常和Struts中的主控制器异常的解决办法</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/json%E7%BC%96%E7%A0%81%E8%BF%94%E5%9B%9E%E5%BC%82%E5%B8%B8/1.htm">json编码返回异常</a> <div>一:ajax获取自定义Struts框架中的json编码  出现以下 问题:       1,强制flush输出  json编码打印在首页 2, 不强制flush js会解析json 打印出来的是错误的jsp页面   却没有跳转到错误页面 3,  ajax中的dataType的json 改为text 会</div> </li> <li><a href="/article/1379.htm" title="JUnit使用的设计模式" target="_blank">JUnit使用的设计模式</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a> <div>JUnit源代码涉及使用了大量设计模式 1、模板方法模式(Template Method)         定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义该算法的某些特定步骤。这里需要复用的是算法的结构,也就是步骤,而步骤的实现可以在子类中完成。   </div> </li> <li><a href="/article/1506.htm" title="Linux常用命令(摘录)" target="_blank">Linux常用命令(摘录)</a> <span class="text-muted">sunjing</span> <a class="tag" taget="_blank" href="/search/crond/1.htm">crond</a><a class="tag" taget="_blank" href="/search/chkconfig/1.htm">chkconfig</a> <div>chkconfig --list   查看linux所有服务 chkconfig --add servicename 添加linux服务 netstat -apn | grep 8080  查看端口占用 env 查看所有环境变量 echo $JAVA_HOME 查看JAVA_HOME环境变量   安装编译器 yum install -y gcc</div> </li> <li><a href="/article/1633.htm" title="【Hadoop一】Hadoop伪集群环境搭建" target="_blank">【Hadoop一】Hadoop伪集群环境搭建</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div> 结合网上多份文档,不断反复的修正hadoop启动和运行过程中出现的问题,终于把Hadoop2.5.2伪分布式安装起来,跑通了wordcount例子。Hadoop的安装复杂性的体现之一是,Hadoop的安装文档非常多,但是能一个文档走下来的少之又少,尤其是Hadoop不同版本的配置差异非常的大。Hadoop2.5.2于前两天发布,但是它的配置跟2.5.0,2.5.1没有分别。 &nb</div> </li> <li><a href="/article/1760.htm" title="Anychart图表系列五之事件监听" target="_blank">Anychart图表系列五之事件监听</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/chart/1.htm">chart</a> <div>创建图表事件监听非常简单:首先是通过addEventListener('监听类型',js监听方法)添加事件监听,然后在js监听方法中定义具体监听逻辑。 以钻取操作为例,当用户点击图表某一个point的时候弹出point的name和value,代码如下: <script> //创建AnyChart var chart = new AnyChart(); //添加钻取操作&quo</div> </li> <li><a href="/article/1887.htm" title="Web前端相关段子" target="_blank">Web前端相关段子</a> <span class="text-muted">braveCS</span> <a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF/1.htm">web前端</a> <div>Web标准:结构、样式和行为分离   使用语义化标签 0)标签的语义:使用有良好语义的标签,能够很好地实现自我解释,方便搜索引擎理解网页结构,抓取重要内容。去样式后也会根据浏览器的默认样式很好的组织网页内容,具有很好的可读性,从而实现对特殊终端的兼容。 1)div和span是没有语义的:只是分别用作块级元素和行内元素的区域分隔符。当页面内标签无法满足设计需求时,才会适当添加div</div> </li> <li><a href="/article/2014.htm" title="编程之美-24点游戏" target="_blank">编程之美-24点游戏</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; public class PointGame { /**编程之美 </div> </li> <li><a href="/article/2141.htm" title="主页面子页面传值总结" target="_blank">主页面子页面传值总结</a> <span class="text-muted">chengxuyuancsdn</span> <a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a> <div>1、showModalDialog returnValue是javascript中html的window对象的属性,目的是返回窗口值,当用window.showModalDialog函数打开一个IE的模式窗口时,用于返回窗口的值 主界面 var sonValue=window.showModalDialog("son.jsp"); 子界面 window.retu</div> </li> <li><a href="/article/2268.htm" title="[网络与经济]互联网+的含义" target="_blank">[网络与经济]互联网+的含义</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E4%BA%92%E8%81%94%E7%BD%91%2B/1.htm">互联网+</a> <div>       互联网+后面是一个人的名字 = 网络控制系统       互联网+你的名字 =  网络个人数据库       每日提示:如果人觉得不舒服,千万不要外出到处走动,就呆在床上,玩玩手游,更不能够去开车,现在交通状况不</div> </li> <li><a href="/article/2395.htm" title="oracle 创建视图 with check option" target="_blank">oracle 创建视图 with check option</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/%E8%A7%86%E5%9B%BE/1.htm">视图</a><a class="tag" taget="_blank" href="/search/view/1.htm">view</a><a class="tag" taget="_blank" href="/search/oralce/1.htm">oralce</a> <div>我们来看下面的例子: create or replace view testview as select empno,ename from emp where ename like ‘M%’ with check option; 这里我们创建了一个视图,并使用了with check option来限制了视图。 然后我们来看一下视图包含的结果: select * from testv</div> </li> <li><a href="/article/2522.htm" title="ToastPlugin插件在cordova3.3下使用" target="_blank">ToastPlugin插件在cordova3.3下使用</a> <span class="text-muted">dibov</span> <a class="tag" taget="_blank" href="/search/Cordova/1.htm">Cordova</a> <div>    自己开发的Todos应用,想实现“ 再按一次返回键退出程序 ”的功能,采用网上的ToastPlugins插件,发现代码或文章基本都是老版本,运行问题比较多。折腾了好久才弄好。下面吧基于cordova3.3下的ToastPlugins相关代码共享。       ToastPlugin.java package&nbs</div> </li> <li><a href="/article/2649.htm" title="C语言22个系统函数" target="_blank">C语言22个系统函数</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/function/1.htm">function</a> <div>C语言系统函数一、数学函数下列函数存放在math.h头文件中Double floor(double num) 求出不大于num的最大数。Double fmod(x, y) 求整数x/y的余数。Double frexp(num, exp); double num; int *exp; 将num分为数字部分(尾数)x和 以2位的指数部分n,即num=x*2n,指数n存放在exp指向的变量中,返回x。D</div> </li> <li><a href="/article/2776.htm" title="开发一个类的流程" target="_blank">开发一个类的流程</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91/1.htm">开发</a> <div>本人近日根据自己的开发经验总结了一个类的开发流程。这个流程适用于单独开发的构件,并不适用于对一个项目中的系统对象开发。开发出的类可以存入私人类库,供以后复用。   以下是开发流程: 1. 明确类的功能,抽象出类的大概结构 2. 初步设想类的接口 3. 类名设计(驼峰式命名) 4. 属性设置(权限设置) 判断某些变量是否有必要作为成员属</div> </li> <li><a href="/article/2903.htm" title="java 并发" target="_blank">java 并发</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/java+%E5%B9%B6%E5%8F%91/1.htm">java 并发</a> <div>能够写出高伸缩性的并发是一门艺术   在JAVA SE5中新增了3个包 java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks 在java的内存模型中,类的实例字段、静态字段和构成数组的对象元素都会被多个线程所共享,局部变量与方法参数都是线程私有的,不会被共享。 </div> </li> <li><a href="/article/3030.htm" title="Spring Security(11)——匿名认证" target="_blank">Spring Security(11)——匿名认证</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/ROLE_ANNOYMOUS/1.htm">ROLE_ANNOYMOUS</a><a class="tag" taget="_blank" href="/search/%E5%8C%BF%E5%90%8D/1.htm">匿名</a> <div>匿名认证 目录 1.1     配置 1.2     AuthenticationTrustResolver          对于匿名访问的用户,Spring Security支持为其建立一个匿名的AnonymousAuthenticat</div> </li> <li><a href="/article/3157.htm" title="NODEJS项目实践0.2[ express,ajax通信...]" target="_blank">NODEJS项目实践0.2[ express,ajax通信...]</a> <span class="text-muted">逐行分析JS源代码</span> <a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a><a class="tag" taget="_blank" href="/search/express/1.htm">express</a> <div>  一、前言         通过上节学习,我们已经        ubuntu系统搭建了一个可以访问的nodejs系统,并做了nginx转发。本节原要做web端服务 及 mongodb的存取,但写着写着,web端就</div> </li> <li><a href="/article/3284.htm" title="在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值" target="_blank">在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值</a> <span class="text-muted">lhbthanks</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a><a class="tag" taget="_blank" href="/search/checkbox/1.htm">checkbox</a> <div>第一种方法:获取结果String类型 在 Action 中获得的是一个 String 型数据,每一个被选中的 checkbox 的 value 被拼接在一起,每个值之间以逗号隔开(,)。 所以在 Action 中定义一个跟 checkbox 的 name 同名的属性来接收这些被选中的 checkbox 的 value 即可。 以下是实现的代码: 前台 HTML 代码: </div> </li> <li><a href="/article/3411.htm" title="003.Kafka基本概念" target="_blank">003.Kafka基本概念</a> <span class="text-muted">nweiren</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a> <div>Kafka基本概念:Topic、Partition、Message、Producer、Broker、Consumer。 Topic:             消息源(Message)的分类。 Partition:             Topic物理上的分组,一</div> </li> <li><a href="/article/3538.htm" title="Linux环境下安装JDK" target="_blank">Linux环境下安装JDK</a> <span class="text-muted">roadrunners</span> <a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>1、准备工作 创建JDK的安装目录: mkdir -p /usr/java/   下载JDK,找到适合自己系统的JDK版本进行下载: http://www.oracle.com/technetwork/java/javase/downloads/index.html   把JDK安装包下载到/usr/java/目录,然后进行解压: tar -zxvf jre-7</div> </li> <li><a href="/article/3665.htm" title="Linux忘记root密码的解决思路" target="_blank">Linux忘记root密码的解决思路</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>1:使用同版本的linux启动系统,chroot到忘记密码的根分区passwd改密码   2:grub启动菜单中加入init=/bin/bash进入系统,不过这时挂载的是只读分区。根据系统的分区情况进一步判断.   3: grub启动菜单中加入 single以单用户进入系统.   4:用以上方法mount到根分区把/etc/passwd中的root密码去除   例如:   ro</div> </li> <li><a href="/article/3792.htm" title="跨浏览器 HTML5 postMessage 方法以及 message 事件模拟实现" target="_blank">跨浏览器 HTML5 postMessage 方法以及 message 事件模拟实现</a> <span class="text-muted">xueyou</span> <a class="tag" taget="_blank" href="/search/jsonp/1.htm">jsonp</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a> <div>postMessage 是 HTML5 新方法,它可以实现跨域窗口之间通讯。到目前为止,只有 IE8+, Firefox 3, Opera 9, Chrome 3和 Safari 4 支持,而本篇文章主要讲述 postMessage 方法与 message 事件跨浏览器实现。postMessage 方法 JSONP 技术不一样,前者是前端擅长跨域文档数据即时通讯,后者擅长针对跨域服务端数据通讯,p</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>