基于Node.js Express搭建Https服务器

内容

1、安装Node.js

2、安装Expressexpress-generator

3、利用express-generator生成新项目

4、生成SSL证书

5、将项目从http转换为https

关键词:Node.jsExpressHttpsEJSSSL证书

 

                                                        1、安装Node.js(自带npm

1.1 下载Node.jsWindows Installer.msi, 32/64位)

    https://nodejs.org/en/download/

1.2 双击msi文件进行安装

    默认所有选项

1.3 测试

    在键盘按下【win+R】键,输入cmd,然后回车,打开cmd窗口

    node -v:显式版本号,说明node.js安装成功了

    npm -v:显式版本号,说明自带的npm安装成功了

        npmNode.js依赖的包进行管理——安装/卸载Node.js需要装的东西

1.4 环境配置【这一步可不做

    当执行:npm install *** [-g]-g代表全局安装)命令时,如果不配置,模块安装到C:\Users\用户名\AppData\Roaming\npm中,占C盘空间。要想将全局模块缓存放在指定文件夹,需配置npm全局模块缓存cache路径。

    npm config set prefix "D:\Develop\nodejs\node_global"

    npm config set cache "D:\Develop\nodejs\node_cache"

    还要设置环境变量:

    (1)新建系统变量NODE_PATH=D:\Develop\nodejs\node_global\node_modules

    (2)将用户变量Path中的C:\Users\用户名\AppData\Roaming\npm修改为D:\Develop\nodejs\node_global

    配置完后,安装一个module测试:如npm install express -g。此时express会被安装到D:\Develop\nodejs\node_global。

    说明:通过npm安装模块时都是去国外的镜像下载的,有的时候由于网络原因会导致安装模块失败,好在阿里有团队维护国内镜像:http://npm.taobao.org/ 上面有使用说明

                                                        2、安装expressexpress-generator

2.1 安装express(全局安装)

npm install express -g

2.2 安装express-generator(全局安装)

npm install express-generator -g


                                                                 3、生成新express项目

3.1 进入cmd窗口,cd到新项目的“父目录”

3.2 执行如下命令

express --view ejs project1 project1:项目名)

--view <engine>添加视图引擎,支持:dust|ejs|hbs|hjs|jade|pug|twig|vash,缺省是jade

这里选用了ejs

Cmd窗口输出结果:

D:\workspace\web\express>express --view ejs project1

   create : project1

   create : project1/package.json

   create : project1/app.js

   create : project1/public

   create : project1/routes

   create : project1/routes/index.js

   create : project1/routes/users.js

   create : project1/views

   create : project1/views/index.ejs

   create : project1/views/error.ejs

   create : project1/bin

   create : project1/bin/www

   create : project1/public/javascripts

   create : project1/public/stylesheets

   create : project1/public/stylesheets/style.css

   create : project1/public/images

   install dependencies:

     > cd project1 && npm install

   run the app:

     > SET DEBUG=project1:* & npm start

3.3 安装依赖项

上述project1/package.json文件内容如下:

{

  "name": "project1",

  "version": "0.0.0",

  "private": true,

  "scripts": {

    "start": "node ./bin/www"

  },

  "dependencies": {

    "body-parser": "~1.18.2",

    "cookie-parser": "~1.4.3",

    "debug": "~2.6.9",

    "ejs": "~2.5.7",

    "express": "~4.15.5",

    "morgan": "~1.9.0",

    "serve-favicon": "~2.4.5"

  }

}

Dependencies中列出了依赖项,执行如下命令安装:cd project1 && npm install

Cmd窗口输出结果:

D:\workspace\web\express>cd project1 && npm install

npm notice created a lockfile as package-lock.json. You should commit this file.

added 58 packages in ***s

说明:这些modules安装到了\project1\node_modules目录下(本地)。

3.4 测试,在cmd窗口执行以下命令

SET DEBUG=project1:* & npm start

也可以直接运行npm start(不好调试信息)

cmd窗口输出结果:

D:\workspace\web\express\project1>SET DEBUG=project1:* & npm start

> [email protected] start D:\workspace\web\express\project1

> node ./bin/www

  project1:server Listening on port 3000 +0ms

在本机浏览器访问:http://localhost:3000/,页面显式

Express

Welcome to Express

如果访问:http://localhost:3000/users/,页面显式

respond with a resource

3.5 项目project1内容说明

/bin:用来启动应用(服务器)

    node ./bin/www

      创建http服务器(与express app关联);启动http服务器(侦听3000

app.js程序:main文件,这个是服务器启动的入口

      创建express app

    设置视图引擎(view engine)、视图文件路径

      指定”/”和”/users”的路由模块

/public: 存放静态资源目录

/routes:路由用于确定应用程序如何响应对特定端点的客户机请求,

    index.js - 响应”/”的响应(在app.js中指定)

    users.js - 响应”/users”的响应(在app.js中指定)

/views: 模板文件所在目录,文件格式为.ejs

    Index.ejs - 一个简单的网页,有变量title

    Error.ejs - 显式错误信息


3.6 project1运行过程说明

1npm start

访问package.jason,里面有"start": "node ./bin/www"

所以实际执行的是node ./bin/www

2www

创建http服务器(与express app关联)

启动http服务器(侦听3000

3app.js中指定了”/”和”/users”Router

           也指定了视图所在目录./views,所用视图引擎是ejs

4)访问网页http://localhost:3000

    路由到./routers/index.js中的router.get(”/”,...)

    绘制网页index.ejs:(视图目录是./views,变量title=’Express’)

             res.render('index', { title: 'Express' });

5)访问网页http://localhost:3000/users

    路由到./routers/users.js中的router.get(”/”,...)

    返回字符串:res.send('respond with a resource');

                                                      3、生成SSL证书

上述project1提供的是HTTP服务器,很多情况下需要HTTPS服务器。为此,首先要得到SSL证书。这里介绍如何在Windows下生成自签名证书。

参考网址:http://blog.csdn.net/huplion/article/details/52892869

3.1 下载openssl-0.9.8k_WIN32.zip,并解压

3.2 进入cmd窗口,cd到解压后的bin目录中

3.3 openssl.exe,进入OPENSSL运行界面

3.4 生成一个RSA私钥

    命令行:genrsa -des3 -out server.key 2048

        des3算法,2048位强度,server.key是秘钥文件名

     注意:此时需要提供一个至少4位的密码(如abcd)。

3.5 生成CSR(证书签名请求)——自签名(内部或测试需求)

    命令行:req -new -key server.key -out server.csr

    说明:需输入国家、地区、城市、组织、组织单位、Common NameEmail

    其中Common Name以写自己的名字或域名。要支持httpsCommon Name应与域 名保持一致,否则会引起浏览器警告。(这里我随便填的,凑合能用

    样例:国家:CN、省州:Beijing、城市:Beijing

          组织名称:joyios、组织单位名称:IT

                Common Namedemo.joyios.com、电邮:[email protected]

3.6 删除私钥中的密码

创建私钥指定密码后,每次Apache启动Web服务器时,都会要求输入密码。

要删除私钥中的密码,操作如下:rsa -in server.key -out server_no_passwd.key

此时需要输入创建私钥时输入的密码

3.7 生成自签名证书

说明:使用自签名临时证书时,浏览器会提示证书的颁发机构是未知的。

命令:x509 -req -days 365 -in server.csr -signkey server_no_passwd.key -out server.crt

server.crt就是SSL证书。

                                             4、将Http服务器修改为https服务器

4.1 SSL证书文件拷贝到project1/bin目录下(其它目录也可)

    server_no_passwd.key

    server.crt

4.2 修改bin/www文件,将http改为https

1)删除var http = require('http'); 

    添加var https = require('https');

    添加var fs = require('fs');

2)读入密钥和证书文件

    var privatekey = fs.readFileSync('bin/server_no_passwd.key', 'utf8');

    var certificate = fs.readFileSync('bin/server.crt', 'utf8');

3)构造https服务器选项

    var options={key:privatekey, cert:certificate};

4)创建HTTPS服务器

    var server = https.createServer(options, app);

    //var server = http.createServer(app);

(5)可以修改port为不同的端口

(6)侦听时可给出回调函数

    server.listen(port,function () { console.log('Https server listening on port ' + port); });

4.3 测试

1)执行npm start

2)访问https://localhost:3000/

3)访问https://localhost:3000/users


猜你喜欢

转载自blog.csdn.net/xingyanchao/article/details/79362443