Express 入门

安装 NodeJS

安装 NodeJS

在终端中,使用下面的命令安装 NodeJS:

curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
yum -y install nodejs

安装完成后,可使用下面的命令测试安装结果:

node -v

安装 Express

创建工作目录

使用下面的命令在服务器创建一个工作目录:

mkdir -p /data/release/hello

进入此工作目录:

cd /data/release/hello

初始化项目

通过 npm init命令为你的应用创建一个 package.json文件。

欲了解 package.json是如何起作用的,请参考 Specifics of npm’s package.json handling

npm init

此命令将要求你输入几个参数,例如此应用的名称和版本。 除 entry point:(index.js)参数外,其他参数你可以直接按 “回车” 键接受默认设置即可。
对于 entry point: (index.js)参数,键入 app.js或者你所希望的名称,这是当前应用的入口文件;如果你希望采用默认的 index.js 文件名,只需按 “回车” 键即可。

安装 Express

接下来安装 Express 并将其保存到依赖列表中:

npm install express --save

如果只是临时安装 Express,不想将它添加到依赖列表中,只需略去 --save
参数即可 [?]
npm install express

安装 Node 模块时,如果指定了 --save参数,那么此模块将被添加到 package.json文件中 dependencies依赖列表中。 然后通过 npm install
命令即可自动安装依赖列表中所列出的所有模块。

Hello world

创建 app.js

在 hello 目录中,创建 app.js,然后将下列代码复制进去:
示例代码:/data/release/hello/app.js
var express = require('express');var app = express();app.get('/', function (req, res) { res.send('Hello World!');});var server = app.listen(3000, function () { console.log('Example app listening on port 3000!');});

完成后,使用 Ctrl + S
保存文件。
[?]
上面的代码启动一个服务并监听从 3000 端口进入的所有连接请求。他将对所有 (/) URL 或 路由 返回 “Hello World!” 字符串。对于其他所有路径全部返回 404 Not Found

req (请求) 和 res (响应) 与 Node 提供的对象完全一致,因此,你可以调用 req.pipe()、req.on('data', callback) 以及任何 Node 提供的方法。

启动应用
通过如下命令启动此应用:
node app.js

然后在浏览器中打开 http://<您的 CVM IP 地址>:3000 并查看输出结果。
(如果访问不成功,可能是机器安全组禁用了 3000 端口所致,你可以前往控制台修改安全组配置。)
该步骤完成后,可使用 Ctrl + C
终止运行。
Express 应用生成器

安装 Express 应用生成器
通过应用生成器工具 express 可以快速创建一个应用的骨架。
通过如下命令安装:
npm install express-generator -g

-h 选项可以列出所有可用的命令行选项:
express -h

将得到输出:
Usage: express [options] [dir] Options: -h, --help output usage information -V, --version output the version number -e, --ejs add ejs engine support (defaults to jade) --hbs add handlebars engine support -H, --hogan add hogan.js engine support -c, --css <engine> add stylesheet <engine> support (less|stylus|compass|sass) (defaults to plain css) --git add .gitignore -f, --force force on non-empty directory

创建项目
进入工作目录:
cd /data/release

执行如下命令,在当前工作目录下创建一个命名为 myapp
的应用:
express myapp

完成后,点击查看 myapp 项目
生成的应用程序具有以下目录结构:
.├── app.js├── bin│ └── www├── package.json├── public│ ├── images│ ├── javascripts│ └── stylesheets│ └── style.css├── routes│ ├── index.js│ └── users.js└── views ├── error.pug ├── index.pug └── layout.pug7 directories, 9 files

启动应用
进入该应用目录:
cd myapp

然后安装所有依赖包:
npm install

启动这个应用(MacOS 或 Linux 平台)[?]

DEBUG=myapp npm start

然后在浏览器中打开 http://<您的 CVM IP 地址>:3000 网址就可以看到这个应用了。
(该步骤完成后,可使用 Ctrl + C
终止运行。)

Windows 平台使用如下命令:set DEBUG=myapp & npm start

基本路由

Express 路由简介
路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。
每一个路由都可以有一个或者多个处理器函数,当匹配到路由时,这些函数将被执行。
路由的定义由如下结构组成:
app.METHOD(PATH, HANDLER)

其中:
app
是一个 express 实例;
METHOD
是某个 HTTP 请求方式 中的一个
PATH
是服务器端的路径;
HANDLER
是当路由匹配到时需要执行的函数。

一个简单的 Express 路由
修改 hello 项目
返回开始创建的 hello
项目:
cd /data/release/hello

编辑 app.js,参考修改如下:
示例代码:/data/release/hello/app.js
var express = require('express');var app = express();// 对网站首页的访问返回 "Hello World!" 字样app.get('/', function (req, res) { res.send('Hello World!');});// 网站首页接受 POST 请求app.post('/', function (req, res) { res.send('Got a POST request');});// /user 节点接受 PUT 请求app.put('/user', function (req, res) { res.send('Got a PUT request at /user');});// /user 节点接受 DELETE 请求app.delete('/user', function (req, res) { res.send('Got a DELETE request at /user');});var server = app.listen(3000, function () { console.log('Example app listening on port 3000!');});

启动应用
node app.js

(该步骤完成后,可使用 Ctrl + C
终止运行。)
测试
你可以使用 curl
命令或 Postman
等工具进行测试。
如在本地终端执行:
curl -X POST http://<您的 CVM IP 地址>:3000

curl -X PUT http://<您的 CVM IP 地址>:3000/user

curl -X DELETE http://<您的 CVM IP 地址>:3000/user

静态文件

利用 Express 托管静态文件
通过 Express 内置的 express.static
可以方便地托管静态文件,例如图片、CSS、JavaScript 文件等。
创建静态目录
创建 public 目录:
mkdir -p /data/release/hello/public

在 public 目录下,创建 hello.html
示例代码:/data/release/hello/public/hello.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <h1>Hello World</h1></body></html>

修改应用
编辑 app.js,参考修改如下:
示例代码:/data/release/hello/app.js
var express = require('express');var app = express();app.use(express.static('public'));var server = app.listen(3000, function () { console.log('Example app listening on port 3000!');});

我们在 app.js 中将静态资源文件所在的目录作为参数传递给 express.static
中间件,这样就可以提供静态资源文件的访问了。
启动应用
node app.js

在浏览器中打开 http://<您的 CVM IP 地址>:3000/hello.html 网址就可以看到这个文件了。

你还可以将本地的文件通过拖拽至左边目录树的 public 目录上传文件来测试。
假设在 public 目录放置了图片、CSS 和 JavaScript 文件,你就可以从浏览器中访问:
http://<您的 CVM IP 地址>:3000/images/kitten.jpghttp://<您的 CVM IP 地址>:3000/css/style.csshttp://<您的 CVM IP 地址>:3000/js/app.jshttp://<您的 CVM IP 地址>:3000/images/bg.pnghttp://<您的 CVM IP 地址>:3000/hello.html

static 中间件更多用法
多个目录
如果你的静态资源存放在多个目录下面,你可以多次调用 express.static
中间件:
app.use(express.static('public'));app.use(express.static('files'));

访问静态资源文件时,express.static
中间件会根据目录添加的顺序查找所需的文件。
指定路径
如果你希望所有通过 express.static
访问的文件都存放在一个“虚拟(virtual)”目录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现,如下所示:
编辑 app.js,参考修改如下:
示例代码:/data/release/hello/app.js
var express = require('express');var app = express();app.use('/static', express.static('public'));var server = app.listen(3000, function () { console.log('Example app listening on port 3000!');});

启动应用:
node app.js

现在,你就可以通过带有 “/static” 前缀的地址来访问 public 目录下面的文件了。如:
http://<您的 CVM IP 地址>:3000/static/hello.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容