Node.js快速上手并部署到好雨云

Node.js快速上手并部署到好雨云

网站的错误不常常发生,但当咱们遇到的时候很是使人懊恼,好比当咱们想要在线挂号的时候,遇到了这个: 201701132957414841857413474.jpgcss

为何会出现这种状况,背后的服务器发生了什么?咱们将使用Node.js作一个简单的web服务器并利用好雨应用管理平台将咱们本地的服务放到互联网上面。html

Node.js是一个开源的跨平台运行环境,容许咱们构建一个服务器端和网络应用的运行环境。使用JavaScript语言开发能够经过Node.js运行时环境跑在任何平台。固然,开始使用前咱们须要先进行安装,经过这个下载地址找到适合咱们系统的安装包进行安装。node

简单的开始

首先咱们须要写一个JavaScript文件,咱们叫它server.js,这个就是咱们运行web服务器的程序。git

var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("It's work!");
  response.end();
}).listen(5000);

相信我,这是你看到的最简单的服务器程序了,是否是很简单,接着咱们在命令行下运行这个文件。程序员

node server.js

这样咱们的web服务器就已经运行了,打开浏览器让咱们确认一下它正常工做了。web

201701131553414841872494604.jpg

Node.js能够用不多的资源,应付大流量访问,由于node采用了event loop机制来解决单线程的问题,这种运行方式称为"异步模式"(asynchronous I/O)或"非堵塞模式"(non-blocking mode)。编程

让咱们经过这幅图解释的更详细一些:json

201701134114414842057209799.jpg

这幅图很好的展现了在Node.js服务内部是如何工做的。一个用来处理外部事件而且把它们转换成对回调的调用的实体。浏览器

这些工做都是在服务内服实现的,咱们在写代码的过程当中不会接触到这些问题。因此咱们只须要了解Node运行如此快的缘由正是基于这种"异步I/O模式"就能够了。服务器

部署到网上

个人服务器已经正常运行了,但是它只是跑在个人本地,若是想要让更多的人访问个人网站,我须要将它放到互联网上咱们须要选择一个云平台来部署咱们的网站。对于云平台咱们有不少选择,好比亚马逊Heroku等等,但由于众所周知的缘由,国外的云服务咱们使用起来并不方便,甚至没法访问。因此我选择了好雨云来部署网站,好雨云是一个云端的应用管理平台,也就是咱们一般所说的PaaS(platform as a service),它容许你自动部署web应用,支持几种构建方式,好比我使用就是源码构建,这节省了我不少时间,可让我专心写代码,不用为服务器、网络以及代码运行环境的配置操心。

写个博客

好,在部署以前,咱们须要进行一些开发的工做,让咱们写个简单网站,新建项目目录名为myblog,并建立server.js(上面说过的,还记得吗?)首先声明一些变量:

var http = require("http");
var fs = require("fs");
var path = require("path");
var mime = require("mime");

这里包含了一个第三方的依赖mime,他不是node的一部分,咱们须要先安装这些第三方依赖才能让程序工做。为了解决依赖问题咱们须要写一个package.json文件将咱们项目须要的依赖放进去。

就像这样:

{
  "name" : "myblog",
  "version" : "0.0.1",
  "description" : "a simple blog",
  "dependencies" : {
    "mime" : "~1.2.7"
  },
  "scripts": {
    "start": "node server.js"
  },
  "engines": {
    "node": "4.7.2"
  }
}

语法很简单,但要注意一些语法细节,否则常常会发生由于少了逗号或者引号形成构建失败这种低级的错误。这里咱们声明依赖的mime的版本、启动命令以及node的版本。

若是咱们代码的根目录下存在package.json文件那么好雨云就会判断这是Node.js程序并安装相应的依赖以及调用咱们声明的命令来启动程序。

接着咱们须要为web服务器增长一些功能来处理不一样的请求,send404是当请求到不存在的文件时,咱们要如何处理:

function send404(response) {
  response.writeHead(404, {"Content-type" : "text/plain"});
  response.write("Error 404: resource not found");
  response.end();
}

sendFile文件数据服务:

function sendFile(response, filePath, fileContents) {
  response.writeHead(200, {"Content-type" : mime.lookup(path.basename(filePath))});
  response.end(fileContents);
}

定义服务器如何执行请求:

function serverWorking(response, absPath) {
  fs.exists(absPath, function(exists) {
    if (exists) {
      fs.readFile(absPath, function(err, data) {
        if (err) {
          send404(response)
        } else {
          sendFile(response, absPath, data);
        }
      });
    } else {
      send404(response);
    }
  });
}

建立http服务器:

var server = http.createServer(function(request, response) {
  var filePath = false;

  if (request.url == '/') {
    filePath = "public/index.html";
  } else {
    filePath = "public" + request.url;
  }

  var absPath = "./" + filePath;
  serverWorking(response, absPath);
});

配置服务的监控端口:

var port_number = server.listen(process.env.PORT || 5000);

为啥是5000呢?由于好雨云默认分配5000的监控端口。因此咱们将这里配置好,就能够直接被访问到。

而后咱们开始写内容,在项目目录(myblog)下新建几个目录:publicstylesheetsimages。咱们将index.html放到public下,将咱们样式文件 style.css放到stylesheets下,静态资源图片放到images下。

博客的首页index.html代码以下:

<!DOCTYPE html>
<html>
    <head>
        <title>个人博客</title>
        <link rel="stylesheet" type="text/css" href="http://oe5ahutux.bkt.clouddn.com/style.css">
    </head>
    <body>
        <div id="header">
            <span>一个简单的博客</span>
        </div>
        <div id="content">
            <h2><a href="http://www.amazon.cn/gp/product/B007VISQ1Y/ref=as_li_ss_tl?ie=UTF8&camp=536&creative=3132&creativeASIN=B007VISQ1Y&linkCode=as2&tag=jysperm07-23">JavaScript 权威指南</a></h2>
            <p>这本书事无巨细地介绍了 JasvaScript 语言核心、标准库以及浏览器提供的 DOM 和 BOM. 本书并无由浅入深的结构,而是通篇平铺直叙地介绍,所以适合有必定 JavaScript 基础的人从头到尾阅读来掌握一些相对细节的 JavaScript 知识,或遇到具体问题时查阅相关章节。</p>
            
            <h2><a href="something.html">JavaScript 异步编程</a></h2>
            <p>这本书介绍了 JavaScript 中事件模型、Promise、async.js 等异步抽象的设计和实现,同时也介绍了 Web Woerk 等在浏览器中优化性能的技巧。这本书适合全部 JavaScript 程序员增长对 Promise 等异步模型的理解,并在实践中挑选合适的异步模型。</p>
        </div>
    </body>
</html>

浏览器中访问的样子: 201701137014314841919993236.jpg

首页代码中,我故意写了一个能够访问的正确连接和一个不可访问的错误连接,这样我能够试一下404返回内容。

201701139802914842048899546.jpg

###部署到好雨云

OK,到这里咱们的网站写好了,须要将代码提交到好雨云来部署,点新建应用后,好雨平台会给咱们一个git代码仓库的地址,咱们只须要将代码提交到这个地址就能够了。

201701139199714841924411600.jpg

在咱们本地的myblog项目目录中执行

# 初始化本地git仓库
git init
# 添加远程仓库地址
git remote add goodrain http://code.goodrain.com/app/simtime_gr8904c4.git
# 执行提交
git add .
git commit -m "first commit"
git push -u goodrain master

提交后,平台自动识别了咱们的语言

201701132669114841927681472.jpg

在自动构建和部署以后,咱们就能够访问到咱们的网站了。

201701135648614842052264688.jpg

总结

咱们写了不到60行代码,将咱们的web服务器构建了起来,并写了一个演示用的博客页面,也许你会说这太简单了,没错,确实是这样,但经过这些你能够快速的了解到web服务器是如何工做。你还能够将Node.js与更多技术结合,好比HTML5CSS3以及JavaScript,固然还包括种类丰富的库和框架支持。

PaaS云平台的选择也是一个重点,能够帮助咱们快速学习、试验咱们的代码,将咱们从复杂的配置和运维工做中解脱了出来。

参考资料: http://abdelraoof.com/blog/2015/10/28/understanding-nodejs-event-loop/ http://doc.goodrain.com/usage/181950

相关文章
相关标签/搜索