当前标签 / Nodejs / 总共9篇

Nodejs 框架 Koa 介绍和使用

对于 Nodejs 框架和开源软件来说,2018 年是非常有趣的一年。开发者社区讨论了企业赞助对开源项目的作用以及如何维护那些没有经济支持却有数百万人使用的项目。在 Github 星标数量方面,Sails、Koa 和 Express 明显高于其他框架。

Nodejs 框架的 Github star 数量统计

不得不说,Express 和 Koa 是 Nodejs 目前炙手可热的2大框架。

Express 诞生已有时日, 是一个基于 Nodejs 平台的极简、灵活的 web 应用开发框架,主要基于 Connect 中间件,并且自身封装了路由、视图处理等功能,使用人数众多。

Koa 相对更为年轻, 是 Express 原班人马基于 ES6 新特性重新开发的框架,主要基于 co 中间件,框架自身不包含任何中间件,很多功能需要借助第三方中间件解决,但是由于其基于 ES6 generator 特性的异步流程控制,解决了 “callback hell” 和麻烦的错误处理问题,大受开发者欢迎。

阅读更多

Nodejs实现的一个网络请求模块化基础案例

本篇文章是基于我前面写过的 《Nodejs 结构和创建》 的进一步实践。在我们面对复杂的业务逻辑的时候就需要一个更好的模块和分职责的结构,今天我们通过一个简单的案例来看看如何创建一个路由 Route 并在 Nodejs 中分离业务逻辑。

Nodejs 网络请求

前面提到过使用 Nodejs 启动一个服务很简单,例如我们启动一个默认端口是 3000 的服务:

var http = require('http');

http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type' : 'text/html'});
    res.write('<h1>Node.js</h1>');
    res.end('<p>Hello World</p>');
}).listen(3000);

console.log('HTTP server is listening at prot 3000.');

这些代码没啥特别的地方,可能这里大家比较好奇的是这个 http 模块到底是个什么,这个是 Nodejs 的一个内置的核心模块(模块和包的概念前面已经提到过了),Nodejs 内置核心模块清单如下:

模块名说明
http提供HTTP服务器功能。
url解析URL。
fs与文件系统交互。
querystring解析URL的查询字符串。
child_process新建子进程。
util提供一系列实用小工具。
path处理文件路径。
crypto提供加密和解密功能,基本上是对OpenSSL的包装。

阅读更多

博客更换ICARUS主题

前言

最近无意间留意到一个比较符合我口味的主题,也许是因为Next主题被我看腻了,于是就换了icarus然后接下来当然是各种折腾,总算是告一段落可以安心的做别的事情了。

主题介绍

主题地址:https://github.com/ppoffice/hexo-theme-icarus

这个主题可以完全替代Next主题,比较让我喜欢的是简洁大气的界面风格,另外还有细致的侧边栏以及订制功能,总结一下特点如下:

  1. 整体的界面美观大方。
  2. Icarus包含常用的搜索,评论,分享和其他插件。
  3. 可设置文章头图片。
  4. 超过70种highlight.js样式可选。
  5. 可以自定义侧边栏。
  6. 字体风格漂亮。
  7. 可在文章内自定义菜单。
  8. 响应式布局。

阅读更多

pug模板引擎(下)

逻辑语法

以下是关于模板逻辑的语法。

JavaScript代码

不输出的代码

- 开始一段不直接进行输出的代码。

- for (var x = 0; x < 3; x++)
  li item

生成后

<li>item</li>
<li>item</li>
<li>item</li>

输出的代码

用=开始一段带有输出的代码,它应该是可以被求值的一个 JavaScript 表达式。为安全起见,它将被 HTML 转义。

p
  = '这个代码被 <转义> 了!'
p= '这个代码被 <转义> 了!'

生成后


<p>这个代码被 &lt;转义&gt; 了!
</p>
<p>这个代码被 &lt;转义&gt; 了!</p>

不转义的输出代码

!= 开始一段不转义的,带有输出的代码。这将不会做任何转义,所以用于执行用户的输入将会不安全。

p
  != '这段文字<strong>没有</strong>被转义!'
p!= '这段文字' + '<strong>没有</strong>被转义!'

生成后

​```xml

这段文字没有被转义!

这段文字没有被转义!

阅读更多

pug模板引擎(上)

安装

sudo npm install pug

但命令行提示 pug 命令未找到,接下来安装 pug-cli,注意一定要全局安装,否则无法正常编译。

sudo npm install pug-cli -g

查看版本

>>> $ pug --version
pug version: 2.0.3
pug-cli version: 1.0.0-alpha6

生成HTML

新建文件命名为index.pug

html
    head
        title dp2px
    body

在命令行输入

>>> $ pug index.pug 
rendered index.html

你会发现在同目录生成了一个 index.html 文件,内容如下

<html><head><title>dp2px</title></head><body></body></html>

接下来我们使用pug -w实现自动编译。

>>> $ pug index.pug -w

我使用的 VS Code,你可以让你的编辑器左右两边显示,方便实时查看。

pug

阅读更多

Nodejs 结构和创建

本文参考自 《Nodejs 开发指南》 和 《Nodejs 实战》 两本书。

异步 I/O

Node.js 最大的特点就是采用了异步 I/O 与事件驱动的架构设计。

$.post('/resource.json', function(data){
    console.log(data);
})

这一小段代码是 jQuery 中的 Ajax 请求,我们知道这个结果函数是异步的,等服务器响应结果后才会执行。

对于一些高并发的需求,传统的解决方法是多线程模型,每个业务提供一个线程系统,通过切换和调度线程来实现高并发中的等待开销。但是这样做无疑又增加了线程管理和调度的开销。

Nodejs 采用的是单线程模型,对于所有的 I/O 操作(阻塞操作)都采用类似上面 Ajax 请求的异步的请求方式,避免了频繁切换线程。

Nodejs 的单线程模型

阅读更多

Hexo打造可以自由配置的网站通知和页面通知

最近本站要更换域名,所以我就想做一个首页和文章内通知,于是就有了这篇文章。

首先打开 theme/next/layout/_layout.swig 文件找到如下代码中的 content-wrap 节点。

 <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            {% block content %}{% endblock %}
          </div>
          {% include '_third-party/duoshuo-hot-articles.swig' %}
          {% include '_partials/comments.swig' %}
        </div>
        {% if theme.sidebar.display !== 'remove' %}
          {% block sidebar %}{% endblock %}
        {% endif %}
      </div>
    </main>

content-wrap 节点中添加下面代码

{% if theme.main_notify.enable%}
      {% if theme.main_notify.pageshow %}
         {% if page.notify === '' %}
           <p class="content-notify marquee">{{ theme.main_notify.notify }}</p>
         {% else %}
          <p class="content-notify marquee">{{ page.notify }}</p> 
         {% endif %}
       {% elseif page.notify !== '' %}
         <p class="content-notify marquee">{{ page.notify }}</p>
       {% elseif page.title === ''%}
         <p class="content-notify marquee">{{ theme.main_notify.notify }}</p>
       {% endif %}
{% endif %}

上面这段代码的逻辑是判断是否要显示通知,我们实际的通知布局只就是 <p> 标签。

<p class="content-notify marquee">通知的内容</p>

阅读更多

Hexo Next博客配置和SEO优化

SEO优化

在Gitlab上面搭建的博客,最近又买了域名给搭建了起来,文章有了,但是发现百度和Google的索引量比较少,乘着国庆假期抽空又折腾了一番,添加了百度和google收录,更换了静态资源cdn地址,对静态资源进行了压缩。

静态资源压缩

百度收录

在搜索引擎中输入site:<域名>, 如果没有被收录可以点击“网址提交”来提交网站。百度链接提交

生成站点地图

我们需要使用npm自动生成网站的sitemap,然后将生成的sitemap提交到百度和其他搜索引擎。

npm install hexo-generator-sitemap --save     
npm install hexo-generator-baidu-sitemap --save

阅读更多

使用GitHub/GitLab/码云搭建个人博客

我为什么要搭建个人博客

前段时间我在用印象笔记做一些整理和知识归纳,感觉很不舒服,后来装了一个马克飞象花了了70多人名币用来作为印象笔记的markdown编辑器,这样确实舒服了不少。

但是紧接着我就想既然总结了一些东西干嘛不发布到我的博客上去呢(当时我的博客在CSDN),我只能从马克飞象中复制黏贴到博客上去,感觉又重复写了一遍,瞬间有了一键部署博客的想法。

hexo install

后来我结合我之前在github上搭建的个人博客,百度了一下看有没有GitLab和码云上面的类似博客系统,结果还真让我给找到了,不但找到了而且个人感觉非常棒,接下来来看看我是怎么做的。

阅读更多