学习使用外部模块

目标:
建立一个 lesson2 项目,在其中编写代码。
当在浏览器中访问http://localhost:3000/?q=alsotang时,输出alsotang的 md5 值,即 bdd5e57b5c0040f9dc23d430846e68a3

挑战:
访问http://localhost:3000/?q=alsotang时,输出alsotang的 sha1(安全哈希算法)值,即 e3c766d71667567e18f77869c65cd62f6a1b9ab9


知识点:
1. 学习 req.query 的用法
2. 学习建立 package.json 来管理 Node.js 项目。

package.json:
简单说来呢,这个 package.json文件就是定义了项目的各种元信息,包括项目的名称,git repo 的地址,作者等等。最重要的是,其中定义了我们项目的依赖,这样这个项目在部署时,我们就不必将 node_modules目录也上传到服务器,服务器在拿到我们的项目时,只需要执行 npm install,则 npm 会自动读取 package.json 中的依赖并安装在项目的 node_modules下面,然后程序就可以在服务器上跑起来了。

npm init这个命令的作用就是帮我们互动式地生成一份最简单的 package.json 文件,initinitialize的意思,初始化,如图所示:

这次的应用,我们依赖 expressutility两个模块。

$ npm install express utility --save

这次的安装命令与上节课的命令有两点不同,一是没有指定 registry,没有指定的情况下,默认从 npm 官方安装,上次我们是从淘宝的源安装的。二是多了个 --save参数,这个参数的作用,就是会在你安装依赖的同时,自动把这些依赖写入 package.json。命令执行完成之后,查看 package.json,会发现多了一个 dependencies字段,如下图:

然后开始写应用层代码,建立app.js,写入以下代码:

    var express = require('express');
    var utility = require('utility');
    var app = express();

    app.get('/', function (req, res) {
      var q = req.query.q;
      var md5Value = utility.md5(q);
         res.send(md5Value);
    });

    app.listen(3000, function (req, res) {
      console.log('app is running at port 3000');
    });

下面是解释:

// 引入依赖
var express = require('express');
var utility = require('utility');

// 建立 express 实例
var app = express();

app.get('/', function (req, res) {
  // 从 req.query 中取出我们的 q 参数。
  // 如果是 post 传来的 body 数据,则是在 req.body 里面,不过 express 默认不处理 body 中的信息,需要引入 https://github.com/expressjs/body-parser 这个中间件才会处理,这个后面会讲到。
  // 如果分不清什么是 query,什么是 body 的话,那就需要补一下 http 的知识了
  var q = req.query.q;

  // 调用 utility.md5 方法,得到 md5 之后的值
  // 之所以使用 utility 这个库来生成 md5 值,其实只是习惯问题。每个人都有自己习惯的技术堆栈,
  // utility 的 github 地址:https://github.com/node-modules/utility
  // 里面定义了很多常用且比较杂的辅助方法,可以看看
  var md5Value = utility.md5(q);

  res.send(md5Value);
});

app.listen(3000, function (req, res) {
  console.log('app is running at port 3000');
});

然后运行程序:

$ node app.js

访问 http://localhost:3000/?q=alsotang,完成。

题外话
如果直接访问 http://localhost:3000/会抛错。
可以看到,这个错误是从crypto.js中抛出的。

这是因为,当我们不传入 q 参数时,req.query.q取到的值是 undefinedutility.md5 直接使用了这个空值,导致下层的 crypto 抛错。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值