Express 3.0新手指南入门教程

在确认已经安装了node之后(下载), 在你的机器上创建一个目录,让我们来开始你的第一个应用程序吧

$ mkdir hello-world

在这个目录中你首先得定义一下你的应用程序“包”文件,它和其它的node程序包是一样的。 你得在这个目录中创建一个package.json文件,在里面express作为一个依赖。 你也可以使用 npm info express version 来获取express最新的版本号, 最好使用最新的版本号而不是下面的3.x,这样新出的功能就不会让你感觉到奇怪了。

{
  "name": "hello-world",
  "description": "hello world test app",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "express": "3.x"
  }
}

现在package.json文件已经准备好了,使用npm(1) 安装依赖, 这里的依赖仅仅是Express。

$ npm install

当npm完成后,Express 3.x 和它的依赖就安装到你的 ./node_modules 目录里了。 你可以通过 npm ls 来确认一下,它会把Express 和它的依赖展示成下面的树状结构。

$ npm ls
hello-[email protected].0.1 /private/tmp
└─┬ [email protected].0.0beta7
  ├── [email protected].6.1
  ├─┬ [email protected].3.9
  │ ├── [email protected].1.0
  │ ├── [email protected].0.4
  │ ├── [email protected].2.0
  │ ├── [email protected].0.11
  │ └── [email protected].4.2
  ├── [email protected].0.3
  ├── [email protected].7.0
  ├── [email protected].1.0
  ├── [email protected].0.1
  ├── [email protected].3.3
  ├── range-[email protected].0.4
  ├─┬ response-[email protected].0.1
  │ └── [email protected].2.0
  └─┬ [email protected].0.3
    └── [email protected].2.6

现在我们来写真正的代码了!创建一个名为app.js 或者 server.js的文件,叫什么看你个人喜好了。 载入express 然后使用代码 express()创建一个新的应用程序:

var express = require(‘express‘);
var app = express();

在这个应用程序实例里,你可以通过 app.VERB()定义路由,下面的例子是"GET /"返回 "Hello World" 字符串。 req 和 res 对象是和node原生提供给你的一致的,你也可以执行 res.pipe(), req.on(‘data‘, callback) 等任何事情在没有Express的情况下可以做的事情。

app.get(‘/hello.txt‘, function(req, res){
  var body = ‘Hello World‘;
  res.setHeader(‘Content-Type‘, ‘text/plain‘);
  res.setHeader(‘Content-Length‘, body.length);
  res.end(body);
});

Express 给这些对象加了一个封装好的方法,比如 res.send(), 它会帮你设置Content-Length:

app.get(‘/hello.txt‘, function(req, res){
  res.send(‘Hello World‘);
});

现在我们通过执行 app.listen() 来绑定并监听连接。 它接受的参数和nodenet.Server#listen()的方法一致:

app.listen(3000);
console.log(‘Listening on port 3000‘);

使用express(1) 来生成一个应用程序

Express 附带了一个可以执行的文件,这里命名为 express(1). 如果你使用npm全局安装的express, 在你的机器任何位置它都是可用的:

$ npm install -g express

这个工具提供了一个非常简单的生成一个程序骨架的功能,但是它也有局限,比如它只支持很少的几个模板引擎。 而事实上Express几乎支持所有的为node所建的模板引擎。 使用 --help查看一下帮助:

Usage: express [options]

Options:

  -h, --help          输出帮助信息
  -V, --version       输出版本号
  -s, --sessions      添加 session 支持
  -e, --ejs           添加 ejs 模板引擎支持 (默认为jade)
  -J, --jshtml        添加 jshtml模板引擎支持 (默认为jade)
  -H, --hogan         添加 hogan.js模板引擎支持
  -c, --css   样式 <引擎> 支持 (less|stylus) (默认为css)
  -f, --force         强制在非空目录执行

如果你想生成一个支持EJS, Stylus, 和session的应用程序,只需要简单的执行下面的命令:

$ express --sessions --css stylus --ejs myapp

create : myapp
create : myapp/package.json
create : myapp/app.js
create : myapp/public
create : myapp/public/javascripts
create : myapp/public/images
create : myapp/public/stylesheets
create : myapp/public/stylesheets/style.styl
create : myapp/routes
create : myapp/routes/index.js
create : myapp/views
create : myapp/views/index.ejs

install dependencies:
  $ cd myapp && npm install
 
run the app:
  $ node app  

和其它node程序一样,你必须安装依赖:

$ cd myapp
$ npm install

然后让我们运行它吧!

$ node app

这些就是一个简单的应用程序创建和运行的所有步骤。 记住Express没有限定任何的目录结构,这只是一个方便你工作的基本结构。 如果你想得到更多怎么组织目录结构选择,可以查看github上的示例

错误处理

错误处理的中间件和普通的中间件定义是一样的, 只是它必须有4个形参,这是它的形式: (err, req, res, next):

app.use(function(err, req, res, next){
  console.error(err.stack);
  res.send(500, ‘Something broke!‘);
});

一般来说非强制性的错误处理一般被定义在最后,下面的代码展示的就是放在别的app.use() 之后:

app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(function(err, req, res, next){
  // logic
});

在这些中间件里的响应是可以任意定义的。只要你喜欢,你可以返回任意的内容,譬如HTML页面, 一个简单的消息,或者一个JSON字符串。

对于一些组织或者更高层次的框架,你可能会像定义普通的中间件一样定义一些错误处理的中间件。 假设你想定义一个中间件区别对待通过XHR和其它请求的错误处理,你可以这么做:

app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);

通常logErrors用来纪录诸如stderr, loggly, 或者类似服务的错误信息:

function logErrors(err, req, res, next) {
  console.error(err.stack);
  next(err);
}

clientErrorHandler 定义如下,注意错误非常明确的向后传递了。

function clientErrorHandler(err, req, res, next) {
  if (req.xhr) {
    res.send(500, { error: ‘Something blew up!‘ });
  } else {
    next(err);
  }
}

下面的errorHandler "捕获所有" 的异常, 定义为:

function errorHandler(err, req, res, next) {
  res.status(500);
  res.render(‘error‘, { error: err });
}

在线用户计数

这一小节我们讲解一个小而全的应用程序,它通过Redis记录在线用户数。 首先你需要创建一个package.json 文件,包含两个依赖, 一个是redis 客户端,另一个是Express。 另外需要确认你安装了redis, 可以能过执行$ redis-server来确认:

{
  "name": "app",
  "version": "0.0.1",
  "dependencies": {
    "express": "3.x",
    "redis": "*"
  }
}

接下来你需要你创建一个应用程序,和一个redis连接:

var express = require(‘express‘);
var redis = require(‘redis‘);
var db = redis.createClient();
var app = express();

接下来是纪录用户在线的中间件。 这里我们使用sorted sets, 它的一个好处是我们可以查询最近N毫秒内在线的用户。 我们通过传入一个时间戳来当作成员的"score"。 注意我们使用 User-Agent 作为一个标识用户的id。

app.use(function(req, res, next){
  var ua = req.headers[‘user-agent‘];
  db.zadd(‘online‘, Date.now(), ua, next);
});

下一个中间件是通过zrevrangebyscore来查询上一分钟在线用户。 我们将能得到从当前时间算起在60,000毫秒内活跃的用户。

app.use(function(req, res, next){
  var min = 60 * 1000;
  var ago = Date.now() - min;
  db.zrevrangebyscore(‘online‘, ‘+inf‘, ago, function(err, users){
    if (err) return next(err);
    req.online = users;
    next();
  });
});

最后我们来使用它,绑定到一个端口!这些就是这个程序的一切了,在不同的浏览器里访问这个应用程序,你会看到计数的增长。

app.get(‘/‘, function(req, res){
  res.send(req.online.length + ‘ users online‘);
});

app.listen(3000);

给Express加一层代理

在Express的前端使用一个反向代理,比如 Varnish 或者 Nginx是非常常见的,它不需要额外的配置。 在通过app.enable(‘trust proxy‘)激活了"trust proxy" 设置后, Express 就会知道它在一个代理的后面,X-Forwarded-* 必须被信任, 通常情况下这些头是很容易被伪装的。

使用了这个设置后会有一些很棒的小变化。 首先由代理设置的X-Forwarded-Proto 会告诉程序它是https 还是http 。 这个值会影响req.protocol.

第二个变化是 req.ip 和 req.ips 的值会被X-Forwarded-For列表里的地址取代。

英文地址:http://expressjs.com/api.html

时间: 2024-11-03 21:44:58

Express 3.0新手指南入门教程的相关文章

Spring Boot 2.0.1 入门教程

简介 Spring Boot是Spring提供的一套基础配置环境,可以用来快速开发生产环境级别的产品.尤其适合开发微服务架构,省去了不少配置麻烦.比如用到Spring MVC时,只需把spring-boot-starter-web依赖添加到Maven依赖中即可.另外它还有如下特性: 创建独立的Spring项目 内置Tomcat, Jetty,Undertow 初始POM配置文件以简化Maven配置 尽可能的自动配置Spring 提供生产环境功能,如统计,健康检查和外部配置 无需XML配置和代码生

Swift2.0不深入只浅出入门教程-01-The Basic

本套视频教程是Swift 2.0的入门教程,如果你看过其他的教程,可以不看这套教程,录制这套教程的目的,一个是为了自学,一个是为之后自己的另一套教程打基础. 之后计划参考这本书iOS Programming The Big Nerd Ranch Guide 4th Edition ,录制一套iOS视频教程,将其翻译成Swift语言. 本期教程主要介绍Swift语言的一些基础知识. 由于CSDN学院的课程审核还没有通过,所以暂时就放到了百度网盘. 视频地址:http://pan.baidu.com

Swift入门教程:基本语法大全

原文:Swift入门教程:基本语法大全       简介:                                                                                                                                                                                  什么是Swift                                  

Swift入门教程:基本语法(一)

      简介:                                                                                       什么是Swift Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为"雨燕",右上角的图标就是它的LOGO 跟Objective-C一样,可以用于开发iOS.Mac应用程序 苹果从2010年7月开始设计Swift语言,耗时4年打造 Swift的语法特点

Android基础入门教程——0.教程引言与目录

Android基础入门教程--0.教程引言与目录 标签(空格分隔): Android基础入门教程 好吧,先自夸一下: 使用Markdown来写blog,使用Android Studio来开发Android程序, 除了基础讲解,还会结合实际开发中用到的,遇到的进行学习,跟着路线图学习 事半功倍,希望给各位Android初学者带来便利~相信你会慢慢喜欢上这个教程的! 另外该教程除了在csdn上发布外,还可以在w3c菜鸟笔记上发布,当然后者是FK排版 过的,看起来比会比csdn上的好看一些,这里同时感

【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

本系列文章由@浅墨_毛星云 出品.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/19809337 1.下载和安装OpenCV SDK VS2010不用说,肯定都安装了吧.来说说当前最新的OpenCV版本2.4.8(2014年2月24日),2.4.9 (2014年4月)的下载和安装.与其说是安装,不如叫解压更加合适,因为我们下载的exe安装文件就是一个自解压程序而已. 在官网:http://opencv.org/上找到OpenCV

Solr7.3.0入门教程,部署Solr到Tomcat,配置Solr中文分词器

solr 基本介绍 Apache Solr (读音: SOLer) 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现.Apache Solr 中存储的资源是以 Document 为对象进行存储的.每个文档由一系列的 Field 构成,每个 Field 表示资源的一个属性.Solr 中的每个 Document 需要有能唯一标识其自身的属性,默认情况下这个属性的名字是 id,在 Schema 配置文件中使用:id进行描述.Solr是

DeepFaceLab2.0 :超详细入门教程!

在这出门慌得一B,在家闲的D疼的日子,静下心来玩玩换脸黑科技也是一个不错的选择.新年新气象,DFL也迎来了2.0版本,虽然当前作者还在不断的修bug, 但是很多小伙伴肯定已经迫不及待的要去尝试新版本了. 今天我就针对2.0版本写一个详细的入门教程,争取做到只要会电脑的就能学会.话不多少直接进入正题,演示的软件版本为当天新鲜出炉的20200203版! 1. 获取软件以及安装 软件获取方法: QQ群:672316851 或者作者GITHUB:https://github.com/iperov/Dee

ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework

文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节:ASP.NET MVC 5 入门教程 (4) View和ViewBag 源码下载:点我下载 一.创建Model MVC中的Model是用来给View提供显示数据的对象. 这里我们首先创建一个Model对象. 在解决方案资源管理器中右键点击Models文件夹,选择添加->类.添加一个名为Employee.cs的Model类