扩展
当在浏览器中访问 http://localhost:3000/?q=alsotang 时,输出 alsotang
的 md5
值,即bdd5e57b5c0040f9dc23d430846e68a3。
package.json 这个文件的用法
简单说来呢,这个 package.json 文件就是定义了项目的各种元信息,包括项目的名称,git repo 的地址,作者等等。最重要的是,其中定义了我们项目的依赖,这样这个项目在部署时,我们就不必将 node_modules 目录也上传到服务器,服务器在拿到我们的项目时,只需要执行 npm install,则 npm 会自动读取 package.json 中的依赖并安装在项目的 node_modules 下面,然后程序就可以在服务器上跑起来了。
新建文件夹
$ mkdir myprojict&& cd myprojict
$ npm init
npm init 这个命令的作用就是帮我们互动式地生成一份最简单的 package.json 文件,init 是 initialize 的意思,初始化。
这时我们来安装依赖,这次的应用,我们依赖 express 和 utility 两个模块。
$ npm install express utility --save
--save
参数,这个参数的作用,就是会在你安装依赖的同时,自动把这些依赖写入 package.json。
{
"name": "py",
"version": "1.0.0",
"description": "",
"main": "app.js",
"dependencies": {
"express": "^4.16.3", //这里会多出这两个
"utility": "^1.14.0"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
app.js
// 引入依赖
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 这个中间件才会处理。
// console.log(req)
var q = req.query.q;
// console.log( 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,完成。
如果访问的后面不加q=alsotang 则会报错。这个错误是从 crypto.js 中抛出的。
这是因为,当我们不传入 q 参数时,req.query.q 取到的值是 undefined,utility.md5 直接使用了这个空值,导致下层的 crypto 抛错。