Files

1399 lines
75 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<meta name="theme-color" content="#222"><meta name="generator" content="Hexo 6.3.0">
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
<link rel="mask-icon" href="/images/logo.svg" color="#222">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.0/css/all.min.css" integrity="sha256-VHqXKFhhMxcpubYf9xiWdCiojEbY9NexQ4jh8AxbvcM=" crossorigin="anonymous">
<script class="next-config" data-name="main" type="application/json">{"hostname":"toozhao.com","root":"/","images":"/images","scheme":"Muse","darkmode":false,"version":"8.28.0","exturl":false,"sidebar":{"position":"left","width_expanded":320,"width_dual_column":240,"display":"post","padding":18,"offset":12,"b2t":true,"scrollpercent":true},"hljswrap":true,"codeblock":{"theme":{"light":"default","dark":"stackoverflow-dark"},"prism":{"light":"prism","dark":"prism-dark"},"copy_button":{"enable":true,"style":"mac"},"fold":{"enable":false,"height":500},"language":false},"bookmark":{"enable":true,"color":"#222","save":"auto"},"mediumzoom":true,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"stickytabs":false,"motion":{"enable":false,"async":false,"duration":200,"transition":{"menu_item":"fadeInDown","post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"prism":false,"i18n":{"placeholder":"搜索...","empty":"没有找到任何搜索结果:${query}","hits_time":"找到 ${hits} 个搜索结果(用时 ${time} 毫秒)","hits":"找到 ${hits} 个搜索结果"},"path":"/search.xml","localsearch":{"enable":true,"top_n_per_article":5,"unescape":false,"preload":false,"trigger":"auto"}}</script><script src="/js/config.js" defer></script>
<meta name="description" content="分享编程、运维、生活与思考">
<meta property="og:type" content="website">
<meta property="og:title" content="大染志">
<meta property="og:url" content="https://toozhao.com/page/8/">
<meta property="og:site_name" content="大染志">
<meta property="og:description" content="分享编程、运维、生活与思考">
<meta property="og:locale" content="zh_CN">
<meta property="article:author" content="Junv">
<meta property="article:tag" content="junv, wahyd4, blog, toozhao, 大染志">
<meta name="twitter:card" content="summary">
<link rel="canonical" href="https://toozhao.com/page/8/">
<script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":true,"isPost":false,"lang":"zh-CN","comments":"","permalink":"","path":"page/8/index.html","title":""}</script>
<script class="next-config" data-name="calendar" type="application/json">""</script>
<title>大染志</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous" defer></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/medium-zoom/1.1.0/medium-zoom.min.js" integrity="sha256-ZgMyDAIYDYGxbcpJcfUnYwNevG/xi9OHKaR/8GK+jWc=" crossorigin="anonymous" defer></script>
<script src="/js/utils.js" defer></script><script src="/js/sidebar.js" defer></script><script src="/js/next-boot.js" defer></script><script src="/js/bookmark.js" defer></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/hexo-generator-searchdb/1.5.0/search.js" integrity="sha256-xFC6PJ82SL9b3WkGjFavNiA9gm5z6UBxWPiu4CYjptg=" crossorigin="anonymous" defer></script>
<script src="/js/third-party/search/local-search.js" defer></script>
<style>
/* =========================================================
Toozhao blog custom styles (injected via head.njk)
阅读体验优化 — 微信读书风格
========================================================= */
html { scroll-behavior: smooth; }
/* 主内容阅读宽度 */
.post-block, .posts-expand .post-block {
max-width: 760px;
}
.post-title {
font-size: 1.7em;
font-weight: 700;
letter-spacing: 0.01em;
}
.post-meta { color: #999; font-size: 0.9em; }
.post-body {
font-size: 1.05em;
line-height: 1.9;
letter-spacing: 0.02em;
color: #333;
}
.post-body p {
margin: 1.1em 0;
text-align: justify;
text-justify: inter-ideograph;
}
.post-body h1, .post-body h2, .post-body h3, .post-body h4, .post-body h5, .post-body h6 {
line-height: 1.4;
margin-top: 1.6em;
margin-bottom: 0.8em;
font-weight: 600;
color: #222;
}
.post-body h2::before, .post-body h3::before, .post-body h4::before {
content: '';
display: inline-block;
width: 4px;
height: 0.9em;
background: #4a90d9;
border-radius: 2px;
margin-right: 10px;
vertical-align: -0.08em;
}
.post-body img {
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
margin: 0.6em auto;
display: block;
max-width: 100%;
}
.post-body blockquote {
border-left: 4px solid #4a90d9;
background: rgba(74, 144, 217, 0.06);
margin: 1.4em 0;
padding: 0.8em 1.2em;
border-radius: 0 8px 8px 0;
color: #555;
}
.post-body blockquote p { margin: 0.4em 0; }
.post-body a {
color: #2d6cdf;
border-bottom: 1px solid rgba(45, 108, 223, 0.3);
transition: color 0.2s, border-color 0.2s;
}
.post-body a:hover { color: #1a4fae; border-bottom-color: #1a4fae; }
.post-body code {
background: rgba(0, 0, 0, 0.05);
border-radius: 4px;
padding: 2px 6px;
font-size: 0.9em;
color: #c7254e;
}
.post-body table {
border-collapse: collapse;
margin: 1.2em auto;
font-size: 0.95em;
}
.post-body table th, .post-body table td {
border: 1px solid #ddd;
padding: 8px 14px;
}
.post-body table th { background: #f5f7fa; font-weight: 600; }
.post-body table tr:nth-child(even) { background: #fafbfc; }
.post-body ul, .post-body ol { padding-left: 1.6em; margin: 0.8em 0; }
.post-body ul li, .post-body ol li { margin: 0.35em 0; }
.post-body hr {
border: none;
border-top: 1px dashed #ccc;
margin: 2em auto;
width: 60%;
}
/* 暗色模式(跟随系统,不依赖 NexT darkmode class */
@media (prefers-color-scheme: dark) {
body { background: #1b1f24; color: #c8cdd3; }
.post-body { color: #c8cdd3; }
.post-body h1, .post-body h2, .post-body h3, .post-body h4, .post-body h5, .post-body h6 { color: #e8eaed; }
.post-body blockquote { background: rgba(74, 144, 217, 0.1); color: #9aa5b1; }
.post-body code { background: rgba(255, 255, 255, 0.1); color: #e88388; }
.post-body table th, .post-body table td { border-color: #3a3f45; }
.post-body table th { background: #2d3238; }
.post-body table tr:nth-child(even) { background: #262a2f; }
.post-meta { color: #777; }
}
::selection { background: rgba(74, 144, 217, 0.25); }
/* 字体调节按钮 */
.font-size-control {
position: fixed;
right: 18px;
bottom: 90px;
z-index: 1000;
background: rgba(0, 0, 0, 0.65);
color: #fff;
border-radius: 20px;
padding: 6px 4px;
display: flex;
flex-direction: column;
gap: 2px;
user-select: none;
}
.font-size-control button {
background: none;
border: none;
color: #fff;
font-size: 13px;
cursor: pointer;
padding: 3px 8px;
opacity: 0.85;
}
.font-size-control button:hover { opacity: 1; }
</style>
<noscript>
<link rel="stylesheet" href="/css/noscript.css">
</noscript>
</head>
<body itemscope itemtype="http://schema.org/WebPage">
<div class="headband"></div>
<main class="main">
<div class="column">
<header class="header" itemscope itemtype="http://schema.org/WPHeader"><div class="site-brand-container">
<div class="site-nav-toggle">
<div class="toggle" aria-label="切换导航栏" role="button">
<span class="toggle-line"></span>
<span class="toggle-line"></span>
<span class="toggle-line"></span>
</div>
</div>
<div class="site-meta">
<a href="/" class="brand" rel="start">
<i class="logo-line"></i>
<h1 class="site-title">大染志</h1>
<i class="logo-line"></i>
</a>
<p class="site-subtitle" itemprop="description">Junv's blog</p>
</div>
<div class="site-nav-right">
<div class="toggle popup-trigger" aria-label="搜索" role="button">
<i class="fa fa-search fa-fw fa-lg"></i>
</div>
</div>
</div>
<nav class="site-nav">
<ul class="main-menu menu"><li class="menu-item menu-item-home"><a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a></li><li class="menu-item menu-item-tags"><a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签</a></li><li class="menu-item menu-item-categories"><a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类</a></li><li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a></li><li class="menu-item menu-item-about"><a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>关于</a></li>
<li class="menu-item menu-item-search">
<a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
</a>
</li>
</ul>
</nav>
<div class="search-pop-overlay">
<div class="popup search-popup">
<div class="search-header">
<span class="search-icon">
<i class="fa fa-search"></i>
</span>
<div class="search-input-container">
<input autocomplete="off" autocapitalize="off" maxlength="80"
placeholder="搜索..." spellcheck="false"
type="search" class="search-input">
</div>
<span class="popup-btn-close" role="button">
<i class="fa fa-times-circle"></i>
</span>
</div>
<div class="search-result-container">
<div class="search-result-icon">
<i class="fa fa-spinner fa-pulse fa-5x"></i>
</div>
</div>
</div>
</div>
</header>
<aside class="sidebar">
<div class="sidebar-inner sidebar-overview-active">
<ul class="sidebar-nav">
<li class="sidebar-nav-toc">
文章目录
</li>
<li class="sidebar-nav-overview">
站点概览
</li>
</ul>
<div class="sidebar-panel-container">
<!--noindex-->
<div class="post-toc-wrap sidebar-panel">
</div>
<!--/noindex-->
<div class="site-overview-wrap sidebar-panel">
<div class="site-author animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
<img class="site-author-image" itemprop="image" alt="Junv"
src="/images/avatar.gif">
<p class="site-author-name" itemprop="name">Junv</p>
<div class="site-description" itemprop="description">分享编程、运维、生活与思考</div>
</div>
<div class="site-state-wrap animated">
<nav class="site-state">
<div class="site-state-item site-state-posts">
<a href="/archives/">
<span class="site-state-item-count">310</span>
<span class="site-state-item-name">日志</span>
</a>
</div>
<div class="site-state-item site-state-tags">
<a href="/tags/">
<span class="site-state-item-count">249</span>
<span class="site-state-item-name">标签</span></a>
</div>
</nav>
</div>
<div class="links-of-author animated">
<span class="links-of-author-item">
<a href="https://github.com/wahyd4" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;wahyd4" rel="noopener me" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a>
</span>
</div>
<div class="cc-license animated" itemprop="license">
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" class="cc-opacity" rel="noopener" target="_blank"><img src="https://cdnjs.cloudflare.com/ajax/libs/creativecommons-vocabulary/2020.11.3/assets/license_badges/small/by_nc_sa.svg" alt="Creative Commons"></a>
</div>
</div>
</div>
</div>
</aside>
</div>
<div class="main-inner index posts-expand">
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2011/11/25/solve-hibernate-8-actions/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2011/11/25/solve-hibernate-8-actions/" class="post-title-link" itemprop="url">解决Hibernate只执行8次数据库操作</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2011-11-26 00:00:00" itemprop="dateCreated datePublished" datetime="2011-11-26T00:00:00+11:00">2011-11-26</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>嗯,原因是这样的,今天下午在写一个获取某个类别下文章数量的时候,需要为每个目录都执行查询,但是我发现一个问题,Hibernate只会执行8次操作,之后就停在那里了,也不会返回数据。</p>
<p>噢,真是恼火,最终在百度上找到了解决办法,原因是这样了,因为我每次执行操作的数据库查询的时候没有关闭Session,因此导致出现了问题。</p>
<p>同志你只要加上这样这样一句话:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">session.close()</span><br></pre></td></tr></table></figure>
<p>好了,再试试,已经搞定了!</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2011/10/31/node-jade-express-mysql-simplelogin/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2011/10/31/node-jade-express-mysql-simplelogin/" class="post-title-link" itemprop="url">node、express、mysql、jade实现用户登录数据获取及验证</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2011-11-01 00:00:00" itemprop="dateCreated datePublished" datetime="2011-11-01T00:00:00+11:00">2011-11-01</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>今天要给大家介绍一下如何利用node.js的expressjademysql三个module实现获取form表单的内容以及通过数据库验证登录的正确性。请确保你已经下载好了前面三个module并且你的电脑里面已经安装好mysql。</p>
<p>首先看看运行页面:</p>
<p><a href="/images/2011/11/1.jpg"><img src="/images/2011/11/1.jpg" title="1"></a></p>
<p>再给大家看看整个小系统的目录结构吧:</p>
<p><a href="/images/2011/11/2.jpg"><img src="/images/2011/11/2.jpg" title="2"></a></p>
<p>请大家按照图中所示的目录结构建立好所有的文档吧。当然jquery你下载就可以了。</p>
<p>接下来,我们将建立数据库:</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">create</span> database receipts;  #创建数据库</span><br><span class="line"></span><br><span class="line">#创建名为<span class="keyword">user</span>的表</span><br><span class="line">use receipts;</span><br><span class="line"><span class="keyword">create table</span> <span class="keyword">user</span> (</span><br><span class="line"> userid <span class="type">bigint</span> auto_increment <span class="keyword">not null</span> <span class="keyword">primary key</span>,</span><br><span class="line"> username <span class="type">varchar</span>(<span class="number">20</span>) <span class="keyword">not null</span>,</span><br><span class="line"> pass <span class="type">varchar</span>(<span class="number">30</span>) <span class="keyword">not null</span></span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<p>然后我们来书写我们所需要的login.jade。这里使用jade,我们需要创建一个简单的layout.jade(模板),在layout模板中我们将定义最基本的网页框架。设定大多数网页相同的部分。这里关于jade的语法我就不多讲了,jade的官网上很详细,直接给出layout的代码:</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">!!! 5</span><br><span class="line">html</span><br><span class="line"> head</span><br><span class="line"> title=title</span><br><span class="line"> link(rel=&#x27;stylesheet&#x27;,type=&#x27;text/css&#x27;,href=&#x27;/css/style.css&#x27;)</span><br><span class="line"> body!=body</span><br></pre></td></tr></table></figure>
<p>注意,由于jade会对我们所写的代码进行重新编码,编码成linux的相关格式,这里建议大家使用类似notepad++、ultra editor等软件时将其编码为UTF-8 无DOM格式,并且请不要在文件中同时使用空格和Tab对文件分隔,会导致报错。这里强调一下比如上述 title&#x3D;title,这里是把网页的标题赋值给一个变量叫做title,之后我们声明并赋值title。link后面不能添加空格。类似的也一样。</p>
<p>下面是我们的登录界面login.jade,代码如下:</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">form(id=&#x27;login&#x27;,method=&#x27;post&#x27;,action=&#x27;/login&#x27;)</span><br><span class="line"> h1 Log In</span><br><span class="line"> p(style=&#x27;margin-top:20px;&#x27;) #&#123;error&#125;</span><br><span class="line"> fieldset(id=&#x27;inputs&#x27;)</span><br><span class="line"> input(id=&#x27;username&#x27;,name=&#x27;username&#x27;,type=&#x27;text&#x27;,placeholder=&#x27;Username&#x27;,autofocus=&#x27;&#x27;,required=&#x27;&#x27;)</span><br><span class="line"> input(id=&#x27;password&#x27;,name=&#x27;password&#x27;,type=&#x27;password&#x27;,placeholder=&#x27;Passowrd&#x27;,required=&#x27;&#x27;)</span><br><span class="line"> fieldset(id=&#x27;actions&#x27;)</span><br><span class="line"> input(type=&#x27;submit&#x27;,id=&#x27;submit&#x27;,value=&#x27;Log in&#x27;)</span><br><span class="line"> a(href=&#x27;&#x27;) Forgot your password</span><br><span class="line"> a(href=&#x27;http://google.com&#x27;) Register</span><br></pre></td></tr></table></figure>
<p>大致是定义一个完整的表单。并且定义一个显示提示错误信息的地方。当然还有最重要的css代码。我将在后面提供源码给大家下载。<br>home.jade和index.jade这个程序里面我们用不到,因此内容可以不管它。</p>
<p>接下来,我们就开始写代码了。当然是使用express了。首先我们将写两个路由器在app.js中,一个是显示登录的页面并且作为首页,另外一个是验证登录的页面。</p>
<p>&#x2F;&#x2F;首先添加配置信息</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">app.set(&#x27;view engine&#x27;,&#x27;jade&#x27;); //设置模板引擎</span><br><span class="line">app.set(&#x27;views&#x27;,__dirname+&#x27;/views&#x27;); //配置jade文件夹</span><br><span class="line">app.use(express.static(__dirname+&#x27;/public&#x27;)); //设置静态文件文件夹,比如cssjs,/images</span><br><span class="line">app.use(express.bodyParser()); //用户获取form表单数据</span><br><span class="line">app.use(express.methodOverride());</span><br><span class="line"></span><br><span class="line">//设置首页。</span><br><span class="line">app.get(&#x27;/&#x27;,function(req,res)&#123;</span><br><span class="line"> res.render(&#x27;index&#x27;,&#123;title:&#x27;欢迎使用收据管理系统&#x27;,error:&#x27;&#x27;&#125;);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">style=&quot;padding-left: 30px;&quot;</span><br></pre></td></tr></table></figure>
<ul>
<li>获取表单中数据</li>
<li>创建mysql数据库连接</li>
<li>从mysql请求数据</li>
<li>将数据库中数据与form表单进行比较,并返回结果。</li>
</ul>
<p>&#x2F;&#x2F;获取表单中数据<br>var user &#x3D; req.body.username &#x2F;&#x2F;这样便可以获取到form表单中 name&#x3D;”username”值,依赖于express.bodyParser()</p>
<p>创建mysql数据库连接。这里我们将做一个小小的封装。将封装的函数写入 user.js</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">//连接mysql服务器</span><br><span class="line">function connectServer()&#123;</span><br><span class="line"> //创建mysql连接,设置用户名,密码</span><br><span class="line"> var client = mysql.createClient(&#123;</span><br><span class="line"> user:&#x27;root&#x27;,</span><br><span class="line"> password :&#x27;root&#x27;</span><br><span class="line"> &#125;);</span><br><span class="line"> client.host= &#x27;127.0.0.1&#x27;;</span><br><span class="line"> client.port=3306;</span><br><span class="line"> client.database=&#x27;receipts&#x27;; //选择需要使用的数据库,创建数据库时不必须,其他时候必须</span><br><span class="line"> return client; //返回创建好的数据库连接对象</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>&#x2F;&#x2F;接下来我们将从数据库获取数据,同样我们也做一个封装。因为要执行数据库操作。因此我们需要传入一个数据库连接对象client,并且传入用户名,以便查出该用户对应的密码。再则我们需要创建一个回调函数以便于,在获取到数据库中的值后,做出相关判断。按照常规长发很难获取值。应该闭包可以。(这个回调函数得感谢一个群里的大牛。),代码如下。</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">//执行mysql查询操作。返回查询获取到的对象</span><br><span class="line"> function selectFun(client,username,callback)&#123;</span><br><span class="line"> //client为一个mysql连接对象</span><br><span class="line"> client.query(&#x27;select pass from user where username=&quot;&#x27;+username+&#x27;&quot;&#x27;,function(err,results,fields)&#123;</span><br><span class="line"> if(err) throw err;</span><br><span class="line"></span><br><span class="line"> callback(results); //在获取结果之后由回调函数进行相关操作</span><br><span class="line"> &#125;);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">style=&quot;padding-left: 30px;&quot;</span><br></pre></td></tr></table></figure>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">style=&quot;padding-left: 30px;&quot;</span><br></pre></td></tr></table></figure>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">style=&quot;padding-left: 30px;&quot;</span><br></pre></td></tr></table></figure>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">style=&quot;padding-left: 30px;&quot;</span><br></pre></td></tr></table></figure>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">style=&quot;padding-left: 30px;&quot;</span><br></pre></td></tr></table></figure>
<blockquote>
</blockquote>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">style=&quot;padding-left: 30px;&quot;</span><br></pre></td></tr></table></figure>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">style=&quot;padding-left: 30px;&quot;</span><br></pre></td></tr></table></figure>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2011/10/28/node-js-web-express/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2011/10/28/node-js-web-express/" class="post-title-link" itemprop="url">Node.js web框架express入门(1</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2011-10-29 00:00:00" itemprop="dateCreated datePublished" datetime="2011-10-29T00:00:00+11:00">2011-10-29</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>从我自己现在学校node.js说了解的情况,我觉得node.js至少比Java简单不少。使用node.js的诸多第三方框架更是让node.js简单了不少。其实express 框架几天前我就看了一些。也写了一些例子。虽然没有完全掌握,但是我想在这里和大家一起分享我学到的知识,也算是一种记录。</p>
<p>首先,当然我们也得安装express 的module</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install express</span><br></pre></td></tr></table></figure>
<p>接下来我们就是可以开始写一个简单的程序了。</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">var express = require(&#x27;express&#x27;); //导入module</span><br><span class="line"> var app = express.createServer(); //创建并返回一个express的server对象</span><br><span class="line"> app.get(&#x27;/&#x27;,function (req,res)&#123; //为跟地址目录设置路由,并且监听get方法。</span><br><span class="line"> res.send(&quot;Hello,World&quot;); //向浏览器返回hello world</span><br><span class="line"> &#125;);</span><br><span class="line"> app.listen(4000); //设置服务器监听4000端口</span><br></pre></td></tr></table></figure>
<p>运行程序,然后再浏览器中输入localhost:4000试试,是不是出现了hello world了。当然这只是一个最简单的程序。下面我们可以再多做一些。</p>
<p>这里需要说明一下。默认的,系统将在您的请求处理中,在此例里面即在app.get();里面为你添加下面两句话</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">res.charset=&#x27;utf-8&#x27;; //系统默认的res.send()和res.render()都默认采用utf-8编码</span><br><span class="line"> res.contentType(&#x27;Text/html&#x27;); //系统提供默认为Text/Html的Content-Type</span><br></pre></td></tr></table></figure>
<p>接下来,我们将通过链接中的地址获取请求内容</p>
<p>在程序中加入一段代码如下</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">app.get(&#x27;/hello/:name&#x27;,function (req,res)&#123;</span><br><span class="line"> //如果你在地址栏中输入如下/hello/Junv.那么你将在页面中看到name=======Junv</span><br><span class="line"> //&#x27;/hello/:name&#x27;中的name相当于定义一个变量name,并且把我们输入的名字赋值给他。</span><br><span class="line"> res.send(&#x27;name======&#x27;+req.params.name);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<p>试试看看吧。成功了吧!</p>
<p>对不起,写着写着觉得很别扭。今天就写到这里吧。下次在继续吧。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2011/10/25/node-js-send-e-mail/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2011/10/25/node-js-send-e-mail/" class="post-title-link" itemprop="url">使用Node.js发送电子邮件(E-mail</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2011-10-26 00:00:00" itemprop="dateCreated datePublished" datetime="2011-10-26T00:00:00+11:00">2011-10-26</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>10月27日更新,可以发送附件</p>
<p>今天晚上花了点时间试了一下使用node.js发送电子邮件,也挺简单的,<del>不过有个问题一直没有解决,就是发送附件,</del>我弄明白的时候,会补充资料的。</p>
<p>首先我们还是得安装node的第三方用户发送email的module 。</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install nodemailer</span><br></pre></td></tr></table></figure>
<p>安装好之后,还有一个问题需要注意,我们应该确保用来发送邮件的邮箱地址是打开只是IMAP 、SMTP功能的,这样才可以发送邮件成功。</p>
<p>接下来我们就开始写代码,其实很简单,官方网站也都已经说得很清楚了。</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">var mail = require(&#x27;nodemailer&#x27;); //包含发送邮件所需module</span><br><span class="line">mail.SMTP = &#123;</span><br><span class="line"> use_authentication: true, //如果我们使用QQ等邮箱,这个必须写且为true</span><br><span class="line"> host: &#x27;smtp.qq.com&#x27;, //定义用来发送邮件的邮箱服务器,一般是QQ这些的</span><br><span class="line"> port:25, //定义服务器端口,一般是25 ,如果是使用SSL端口一般为465,或者587</span><br><span class="line"> ssl:false, //默认不适用SSL,可以省略不写</span><br><span class="line"> user: &#x27;wahyd4@qq.com&#x27;, //邮箱用户名</span><br><span class="line"> pass:&#x27;*****&#x27; //输入邮箱密码</span><br><span class="line">&#125;</span><br><span class="line">mail.send_mail(</span><br><span class="line">&#123;</span><br><span class="line"> sender:&#x27;wahyd4@qq.com&#x27;, //发送邮件的地址</span><br><span class="line"> to:&#x27;wahyd4@gmail.com&#x27;, //发给谁</span><br><span class="line"> subject:&#x27;随便把&#x27;, //主题</span><br><span class="line"> body:&#x27;Hello,这个邮件来自node.js&#x27;</span><br><span class="line">&#125;,</span><br><span class="line">//回调函数,用户判断发送是否成功,如果失败,输出失败原因。</span><br><span class="line">function(error,success)&#123;</span><br><span class="line"> if(!error)&#123;</span><br><span class="line"> console.log(&#x27;message success&#x27;);</span><br><span class="line"> &#125;else&#123;</span><br><span class="line"> console.log(&#x27;failed&#x27;+error);</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line">);</span><br></pre></td></tr></table></figure>
<p>这里我没有使用SSL进行发送,而且发送的是纯文本,也可以发送html,如果发送html则在send_mail函数里面加上:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">html: &#x27; 你好。。邮件来自node.js&#x27;,</span><br></pre></td></tr></table></figure>
<p>如果使用SSL进行发送我们则需要将mail.SMTP改为:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">mail.SMTP = &#123;</span><br><span class="line"> use_authentication: true, //如果我们使用QQ等邮箱,这个必须写且为true</span><br><span class="line"> host: &#x27;smtp.qq.com&#x27;, //定义用来发送邮件的邮箱服务器,一般是QQ这些的</span><br><span class="line"> port:465, //定义服务器端口,一般是25 ,如果是使用SSL端口一般为465</span><br><span class="line"> ssl:true, //默认不适用SSL,可以省略不写</span><br><span class="line"> user: &#x27;wahyd4@qq.com&#x27;, //邮箱用户名</span><br><span class="line"> pass:&#x27;*****&#x27; //输入邮箱密码</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>好了。现在你运行程序试试,是不是成功了。</p>
<p>我今天晚上遇到一个错误 :<strong>503 ERROR,need EHLO and AUTH first</strong>。就是因为没有添加use_authentication &#x3D; true的缘故。加上之后,搞定。</p>
<p>———————————————————分割线———————-</p>
<p>发送附件的话。首先我们得使用</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">var fs = require(&#x27;fs&#x27;);    //导入文件系统相关的包</span><br></pre></td></tr></table></figure>
<p>饭后我们将文件读入内存,并将其发送。</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">//读入文件</span><br><span class="line">var img = fs.readFileSync(__dirname+&quot;/cat.jpg&quot;);</span><br><span class="line"></span><br><span class="line">var attachment = [&#123;</span><br><span class="line"> &#x27;filename&#x27;: &quot;cat.jpg&quot;, //这里只是给附件取名称,而不是导入文件内容</span><br><span class="line"> &#x27;contents&#x27;: img //导入文件</span><br><span class="line">&#125;] //定义我们需要发送的附件</span><br></pre></td></tr></table></figure>
<p>接下来我们需要在send_mail函数中加入发送附件即可</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">mail.send_mail(</span><br><span class="line">&#123;</span><br><span class="line"> sender:&#x27;wahyd4@qq.com&#x27;, //发送邮件的地址</span><br><span class="line"> to:&#x27;wahyd4@gmail.com&#x27;, //发给谁</span><br><span class="line"> subject:&#x27;测试发送文件&#x27;, //主题</span><br><span class="line"> attachments: attachment, //添加附件</span><br><span class="line"> body:&#x27;Hello,这个邮件来自node.js,包含附件哦,亲!&#x27;</span><br><span class="line"></span><br><span class="line">&#125;,</span><br></pre></td></tr></table></figure>
<p>附上Nodemailer的网址:<a target="_blank" rel="noopener" href="http://www.nodemailer.org/">http://www.nodemailer.org/</a></p>
<p>enjoy it!</p>
<p>最后还是感谢 <a target="_blank" rel="noopener" href="https://github.com/andris9">andris9</a> 大叔很快帮我解决了问题!</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2011/10/24/node-js-connect-mysql/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2011/10/24/node-js-connect-mysql/" class="post-title-link" itemprop="url">使用node.js连接mysql数据库</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2011-10-25 00:00:00" itemprop="dateCreated datePublished" datetime="2011-10-25T00:00:00+11:00">2011-10-25</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2011/10/1036320.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2011/10/1036320-296x300.png" title="1036320"></a></p>
<p>Javascript连接数据库可能很多同学之前都没有想到吧,不过现在使用node.js我们可以很容易地连接各种数据库。比如传统关系型数据库Mysql以及现在正火的非关系型数据库。这里讲一下如何连接mysql数据库其实官方的文档以及很详细了。</p>
<p>首先我们需要连接mysql所需的Module</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install mysql</span><br></pre></td></tr></table></figure>
<p>接下来就可以开始编程,连接数据库了。</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">var mysql = require(&#x27;mysql&#x27;);//导入mysql Module</span><br><span class="line">var client = mysql.createClient(&#123;</span><br><span class="line"> user:&#x27;root&#x27;,</span><br><span class="line"> password :&#x27;root&#x27;</span><br><span class="line">&#125;);</span><br><span class="line">/*</span><br><span class="line">设置数据库的地址,这里请不要使用localhost,</span><br><span class="line">至少我在windows这里出错,如果不写系统默认为localhost</span><br><span class="line">*/</span><br><span class="line">client.host =&#x27;127.0.0.1&#x27;;</span><br><span class="line">client.port = 3306; //设置数据库端口,如果不写默认为3306</span><br><span class="line">client.database = &#x27;node&#x27;;</span><br><span class="line"> //create a database</span><br><span class="line"> client.query(&#x27;create database test_db&#x27;,function(err)&#123;</span><br><span class="line"> if (err &amp;&amp; err.number != mysql.ERROR_DB_CREATE_EXISTS) &#123;</span><br><span class="line"> throw err; //添加异常处理</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;);</span><br></pre></td></tr></table></figure>
<p>这里我们使用的是client.query();执行sql语句,官方的API中client.query(sql,[params,cb])方法中还可以添加回调函数。</p>
<p>执行其他SQL语句也是使用client.query()函数。这里说一下插入语句</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">client.query(&#x27;insert into node_t  values(?,?)&#x27;,[1000,&#x27;Junv&#x27;]  );</span><br></pre></td></tr></table></figure>
<p>推荐这种参数化插入,而不是将值直接写在里面,可以防止sql注入。</p>
<p>注意:今天下午我最初尝试连接数据库的时候,它一直报错“Domain name not found”,只要我们加上</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">client.host =&#x27;127.0.0.1&#x27;;</span><br></pre></td></tr></table></figure>
<p>将系统默认的host&#x3D;localhost改成127.0.0.1即可。具体原因不明。</p>
<p>是不是很简单呢?接下来我会写关于express 和jade的博客了。一边学习一边写博客。哈哈。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2011/10/22/solve-npm-js-cant-install-node-js/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2011/10/22/solve-npm-js-cant-install-node-js/" class="post-title-link" itemprop="url">解决npm.js不能成功安装Node.js包</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2011-10-23 00:00:00" itemprop="dateCreated datePublished" datetime="2011-10-23T00:00:00+11:00">2011-10-23</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p><a href="/images/2011/10/3.jpg"><img src="/images/2011/10/3.jpg" title="3"></a></p>
<p>学习Node.js当然安装其他开发者开发的各种各样的包一定是必须的,不知道在内地的童鞋发现一个问题没有,我们现在很难从npm.js直接去下载安装包了。笔者在电信和教育网连续试了几天都没有成功。</p>
<p>大概介绍一下npm.js吧。npm.js是node.js的一个包管理工具。通过你可以很方便的安装所有node.js的第三方包、类库,而不需要知道他们的地址、不需要再自己一次一次手动安装。</p>
<p>过程是这样的:(注:笔者只是在windows环境下测试过)</p>
<p>一般地我们会在cygwin里面使用” npm install 你需安装的包名”进行安装。但是我反反复复试过多次,均是很难成功,只有昨天夜里一点左右成功过一次。最初我认为我我们的网速太慢了,于是我在cygwin下面配置代理:</p>
<blockquote>
<p>export http_proxy&#x3D;<a target="_blank" rel="noopener" href="http://127.0.0.1:8087/">http://127.0.0.1:8087</a> 注:我使用的是go agent进行代理(具体安装请google一下)。</p>
</blockquote>
<p>通过代理我成功地安装成功了npm 本身,但是当我转而通过  npm install …进行安装的时候就出现错误了,npm提示 Socket hang up。具体原因不明,总之npm 不能使用cygwin里面配置的代理,于是我使用 export -n http_proxy 删除代理设置。</p>
<p>随后我在网上又收到了另外一个解决方法。在npm里面设置打理</p>
<blockquote>
<p>npm  proxy <a target="_blank" rel="noopener" href="http://127.0.0.1:8087/">http://127.0.0.1:8087</a></p>
</blockquote>
<p>不过设置好之后使用 npm install …,发现同样不成成功,npm 根本没有通过代理去发请求。</p>
<p>最后,我找到一个神器npmf。它的大致介绍是说npmf 是npm的一个复制,他可以永久保存那些包的每个版本。并且你通过npmf安装的包在你下次部署软件的时候依然可用。老实说后面一句话,我没有理解明白,到底是本地缓存,还是在网上缓存。</p>
<blockquote>
<p>各位可以前往npmf网站一看究竟:<a target="_blank" rel="noopener" href="http://npmfjs.org/">http://npmfjs.org/</a></p>
<p>同时还有一个介绍npmf的网页:<a target="_blank" rel="noopener" href="http://nodeknockout.com/teams/preservation-society">http://nodeknockout.com/teams/preservation-society</a></p>
</blockquote>
<p><strong>接下来就是见证奇迹的时刻了:</strong></p>
<p>我们可以直接把npm 默认的registry 换成 npmf的:</p>
<blockquote>
<p>npm config set registry <a target="_blank" rel="noopener" href="http://npmfjs.org:9000/">http://npmfjs.org:9000</a></p>
<p>npm install 你需要安装的包</p>
</blockquote>
<p>是不是发现很神奇,一个包可能10秒甚至更少就可以安装成功。如果你想把registry改成npm默认的</p>
<blockquote>
<p>npm config set registry <a target="_blank" rel="noopener" href="http://registry.npmjs.org/">http://registry.npmjs.org</a></p>
</blockquote>
<p>或者你可以临时使用npmf的registry的包,在你每次安装的包的时候都使用一下语句</p>
<blockquote>
<p>npm registry <a target="_blank" rel="noopener" href="http://npmfjs.org:9000/">http://npmfjs.org:9000</a> install 你需要安装的包</p>
</blockquote>
<p>告诉你们个秘密:通过上面的两种方法,可以使用代理哦。速度又提高了不少。哈哈。。。。。</p>
<p>总结:造成npmjs.org的速度很慢的原因我始终不太清楚。我想npmjs.org的网络应该比npmfjs.org好很多才对。怎么会反过来了。以前我在有人抱怨过说内地使用 npm安装包很难。但是我不知道这是个别现象还是大家都是这个样子。难道G*F*W故意把 registry.npmjs.org和谐了?哎,不管了,大家使用我这个方法来吧。欢迎各位留言</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2011/10/18/notepad-settings/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2011/10/18/notepad-settings/" class="post-title-link" itemprop="url">Notepad++ 设置、插件配置</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2011-10-19 00:00:00" itemprop="dateCreated datePublished" datetime="2011-10-19T00:00:00+11:00">2011-10-19</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>虽然平时也一直在使用Notepad++,但是并没有深入地了解它,没有去鼓捣它。今天中午看了一篇博文说另外一个文本编辑器多么多么强大。我下载使用了一下,发现里面比较好的功能就是函数花括号自动完成、可以更换主题、支持分屏、可以安装插件同时查看几个文件,不过有一点不好就是他是收费软件。于是我想,开源的notepad++是不是也有那些功能呢?在我搜索一番之后,于是就发现了notepad的惊天大秘密。</p>
<p><strong>主题设置</strong></p>
<p>依次点击面板上的settings——style configurator。系统默认提供十几种不同的风格,可供选择。用户还可以为不同的编程语言设置个性化的前、后景色,设置字体大小、种类。我个人使用的主题是Black Board.</p>
<p><strong>分屏实现</strong></p>
<p>据我发现目前notepad++没有快捷键可以开启分屏,而是用户右键点击某个打开的文档列表的Tab。选择Move to other view 或者 Copy to other view,即可以移动或者复制到分屏。此时屏幕编程两屏界面(好像notepad++目前只支持两屏)</p>
<p><strong>字体的放缩</strong></p>
<p>当光标在目前程序时,按住Ctrl键同时,滚动鼠标滚轮即可实现字体的大小改变。</p>
<p><strong>函数自动补充</strong></p>
<p>依次点击Settings—-preferences—Back up&#x2F;Auto completion。勾选enable auto-completion on each input.下面有function completion 和word completion可供选择。</p>
<p>同样也可以勾选Function parameter hint on input。这个是函数暗示吧。需要注意的是,我发现在javascript 和html  下提示相对较好,但是都不会补充完全,都是部分补充。笔者在Java下面测试,大致只能提示类一级,不能提示其二级方法。如果你想拥有很好的提示还是使用eclipse吧。</p>
<p><strong>插件安装:</strong></p>
<p>notepad++支持两种方式安装插件(plugin):第一种,将插件的.dll文件复制到notepad++安装目录的plugin目录下。第二种方法是通过notepad++自带的插件plugin management 进行安装。点击即可实现自动安装插件。安装完成后重启即可工作。</p>
<p>这里推荐一些比较好的插件列表:<a target="_blank" rel="noopener" href="http://my.oschina.net/hcom/blog/4429">http://my.oschina.net/hcom/blog/4429</a></p>
<p>Notepad++官方下载:<a target="_blank" rel="noopener" href="http://notepad-plus-plus.org/">http://notepad-plus-plus.org/</a></p>
<p>我也是今天才发现notepad的这些功能,希望可以和大家一起交流、讨论。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2011/10/14/struts2-i18n/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2011/10/14/struts2-i18n/" class="post-title-link" itemprop="url">Struts2 国际化使用、实现</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2011-10-15 00:00:00" itemprop="dateCreated datePublished" datetime="2011-10-15T00:00:00+11:00">2011-10-15</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>这学期在学习Java EE,也是我选择的方向。因此很感兴趣。前几天看了Struts2 实现国际化,于是今天下午便真实操作一遍。</p>
<p>首先我们要实现国际化,当然得建立相关语言的**.properties**文件。且该文件需放在classes目录下。即是eclipse的src的根目录。</p>
<p>struts2的命名规则是 “自定义名_语言_国别(英文字母为大写).properties”</p>
<p>比如:</p>
<blockquote>
<p>中文简体:test_zh_CN.properties</p>
<p>美国英文:test_en_US.properties</p>
</blockquote>
<p>其他国家的,请大家自己在网上搜索一下吧。</p>
<p>.properties 文件的内容形式为key&#x3D;value</p>
<p>比如:</p>
<blockquote>
<p>中文: username&#x3D;用户名(这里中文要被转码为另外一种格式,才能使用。转换后为: u7528u6237u540Declise会自动帮你转换)</p>
<p>英文:username&#x3D;username</p>
</blockquote>
<p>写好properties文件之后。我们就需要修改struts.xml文件让其支持国际化属性,在struts标签下添加:</p>
<p>这里的value属性的值“test”为你的properties文件的最前面的自定义名。</p>
<p>然后再使用的时候,比如我想获取username的国际化属性:</p>
<blockquote>
<p> &lt;s:text name&#x3D;”username” &gt;或者  &lt;s:property value&#x3D;”getText(username)”&#x2F;&gt; 均可以</p>
</blockquote>
<p>当然还有另外一种方法不需要在struts.xml添加语句。在jsp需要使用国际化资源的时候,添加如下:</p>
<blockquote>
<p>&lt;s:i18n name&#x3D;”test”&gt;</p>
<p>&lt;s:text name&#x3D;”username” &gt; 或者&lt;s:property value&#x3D;”getText(username)”&#x2F;&gt;</p>
</blockquote>
<p>这里的name标签的test和上面的一样。需要注意的是。你每使用一次国际化资源就需要添加一个&lt;s:i18n&gt;标签。</p>
<p>其他的使用就和一般的struts没有区别了。</p>
<p>然后我们可能需要手动切换语言,在jsp页面里面添加:</p>
<blockquote>
</blockquote>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"></span><br></pre></td></tr></table></figure>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"></span><br></pre></td></tr></table></figure>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"></span><br></pre></td></tr></table></figure>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2011/10/12/ai-tired/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2011/10/12/ai-tired/" class="post-title-link" itemprop="url">吵架好烦,哎,心力交瘁</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2011-10-13 00:00:00" itemprop="dateCreated datePublished" datetime="2011-10-13T00:00:00+11:00">2011-10-13</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>好累!好累!</p>
<p>我哪里错了嘛,就因为我说了一句话不太该说的话!</p>
<p>然后你就拂袖而去,纵使我再三挽留你,你却越来越凶,每次你这个样子,我真的不晓得应该怎么办!</p>
<p>我可以怎么办嘛?</p>
<p>我有这样凶过吗?在你面前,我不晓得脾气好了好多倍</p>
<p>你个性却却越来越不好。一摸到就生气,我每次都是在第一时间给你道歉,告诉你我错了。我不该这样做,但是不晓得你想过没有,难道真的每次错的都是我吗,我有那样吼过你吗?</p>
<p>我不是怕你,是因为我爱你,所以我在忍!我愿意接受这一切。但是你不能每次都这样啊。</p>
<p>好累,好烦。不晓得应该从哪里和你沟通,</p>
<p>今天明明不是因为我们的问题,你却说我偏向你寝室的同学,说我偏向漂亮的女生。</p>
<p>真的,大部分关于他们的印象我是从你那里得到的啊。我不喜欢太要强的女生,有啥子了不起嘛。我见多了。</p>
<p>你每次都说我是做错了不愿意道歉。但是你又晓得,很多次我真的觉得我没得错,但是我又在道歉。</p>
<p>在你面前我永远都是错的。</p>
<p>在你们寝室面前,我永远都是被最后考虑的。呼之即来挥之即去。。。。</p>
<p>你理解我一下嘛。你怎么就不理解人呢!</p>
<p>没人理解我,好累。好累!</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2011/10/11/money-is-dirty/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2011/10/11/money-is-dirty/" class="post-title-link" itemprop="url">钱让很多小人原形毕露</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2011-10-12 00:00:00" itemprop="dateCreated datePublished" datetime="2011-10-12T00:00:00+11:00">2011-10-12</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>这几天学校正在搞奖学金的评比,需要每个同学自己对自己的情况进行评估,你在上一学年所获得的将和其他证书这些都是获得加分,当然学习成绩也是分数中很重要的一部分。于是情况出现了。</p>
<p>能够得奖的人为了得更高的将,千方百计地去找分加,同时还要看看其他人是不是快要超过他了。其他人加分是不是正规的,其他人是不是在到处找关系盖章?</p>
<p>真他妈的恶心,在这个奖学金评比之中我看到了谄媚、欺诈、鬼鬼祟祟,说人家加分这样或者那样的不正常。</p>
<p>哎!真的是,钱让小人原形毕露了。</p>
<p>想想去年我也不是这个样子啊。看看有些人,把所有能够加的分都加到最高!你妹啊!</p>
<p>一个奖学金也是,得奖的人都是妈的一群水货,什么都不会,就是会考试、会讨好老师、会拍马屁、会装疯卖傻!</p>
<p>你们就潇洒吧!我又一次明白了,千里之堤,溃于蚁穴!</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<nav class="pagination">
<a class="extend prev" rel="prev" title="上一页" aria-label="上一页" href="/page/7/"><i class="fa fa-angle-left"></i></a><a class="page-number" href="/">1</a><span class="space">&hellip;</span><a class="page-number" href="/page/7/">7</a><span class="page-number current">8</span><a class="page-number" href="/page/9/">9</a><span class="space">&hellip;</span><a class="page-number" href="/page/31/">31</a><a class="extend next" rel="next" title="下一页" aria-label="下一页" href="/page/9/"><i class="fa fa-angle-right"></i></a>
</nav>
</div>
</main>
<footer class="footer">
<div class="footer-inner">
<div class="copyright">
&copy; 2012
<span itemprop="copyrightYear">2026</span>
<span class="with-love">
<i class="fa fa-heart"></i>
</span>
<span class="author" itemprop="copyrightHolder">Junv</span>
</div>
<div class="powered-by"><a href="https://hexo.io/" rel="noopener" target="_blank">Hexo</a> & <a href="https://theme-next.js.org/muse/" rel="noopener" target="_blank">NexT.Muse</a> 强力驱动
</div>
</div>
</footer>
<div class="toggle sidebar-toggle" role="button">
<span class="toggle-line"></span>
<span class="toggle-line"></span>
<span class="toggle-line"></span>
</div>
<div class="sidebar-dimmer"></div>
<div class="back-to-top" role="button" aria-label="返回顶部">
<i class="fa fa-arrow-up fa-lg"></i>
<span>0%</span>
</div>
<div class="reading-progress-bar"></div>
<a role="button" class="book-mark-link book-mark-link-fixed"></a>
<noscript>
<div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
</noscript>
<script>
/* 字号调节 A- / A / A+(阅读体验) */
(function () {
'use strict';
function initFontSize() {
var postBody = document.querySelector('.post-body');
if (!postBody || document.getElementById('font-size-control')) return;
var bar = document.createElement('div');
bar.id = 'font-size-control';
bar.className = 'font-size-control';
var labels = [['A-', -1], ['A', 0], ['A+', 1]];
var current = 1.0;
labels.forEach(function (item) {
var btn = document.createElement('button');
btn.textContent = item[0];
btn.title = item[0] === 'A-' ? '减小字号' : item[0] === 'A+' ? '增大字号' : '恢复默认';
btn.addEventListener('click', function () {
if (item[1] === 0) current = 1.0;
else current = Math.min(1.4, Math.max(0.8, current + item[1] * 0.1));
postBody.style.fontSize = current + 'em';
});
bar.appendChild(btn);
});
document.body.appendChild(bar);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initFontSize);
} else {
initFontSize();
}
})();
</script>
</body>
</html>