Express入门( node.js Web应用框架 )

小编 2026-06-25 阅读:649 评论:0
运用Express框架构建简单的NodeJS应用 Start   确认安装了NodeJS之后(最...

运用Express框架构建简单的NodeJS应用

 

Start 

  确认安装了NodeJS之后(最新的Node安装好后NPM也会自带安装了),npm可理解为nodejs的一个工具包。可通过查看版本来检测是否安装成功:

F:>node -vv0.10.32F:>npm -v1.4.28

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

F:>npm info express versi4.9.5F:>mkdir HelloNode

手动创建一个应用程序依赖的包文件package.json:

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

package.json文件是非常重要的,至少我是这么认为的,dependencies字段指定的是程序依赖的程序包,只要在这里指定,npm install时会自动安装这里面指定的所有包。scripts字段也比较常用的,如上面,如果启动程序,可以用"npm start"或者"npm test"命令,指定supervisor表示可以自动探测程序改变。

 

package.json文件准备好后,运行npm install命令,则会安装文件中指定的依赖的包,

F:>cd HelloNode && npm installexpress@3.17.6 node_modulesexpress├── basic-auth@1.0.0├── merge-descriptors@0.0.2├── fresh@0.2.4├── escape-html@1.0.1├── cookie@0.1.2├── range-parser@1.0.2├── cookie-signature@1.0.5├── vary@1.0.0├── media-typer@0.3.0├── parseurl@1.3.0├── methods@1.1.0├── depd@0.4.5├── crc@3.0.0├── mkdirp@0.5.0 (minimist@0.0.8)├── debug@2.0.0 (ms@0.6.2)├── commander@1.3.2 (keypress@0.1.0)├── proxy-addr@1.0.3 (forwarded@0.1.0, ipaddr.js@0.1.3)├── send@0.9.3 (destroy@1.0.3, ms@0.6.2, etag@1.4.0, mime@1.2.11, on-finished@2.1.0)└── connect@2.26.4 (pause@0.0.1, response-time@2.0.1, basic-auth-connect@1.0.0, bytes@1.0.0, finalhandler@0.2.0, vhost@3.0.0, method-override@2.2.0, on-headers@1.0.0, cookie-parser@1.3.3, connect-timeout@1.3.0, qs@2.2.4, serve-favicon@2.1.5, morgan@1.3.2, serve-static@1.6.3, type-is@1.5.2, errorhandler@1.2.0, serve-index@1.2.1, body-parser@1.8.4, compression@1.1.0, express-session@1.8.2, csurf@1.6.1, multiparty@3.3.2)

当npm完成后,Express 3.x 和它的依赖就安装到当前的 node_modules 目录里了(这个目录会自动创建,里面是安装的依赖包)。 可以通过 npm ls 来确认一下,它会把Express 和它的依赖展示成下面的树状结构。

hello-world@0.0.1 /private/tmp└─┬ express@3.0.0beta7  ├── commander@0.6.1  ├─┬ connect@2.3.9  │ ├── bytes@0.1.0  │ ├── cookie@0.0.4  │ ├── crc@0.2.0  │ ├── formidable@1.0.11  │ └── qs@0.4.2  ├── cookie@0.0.3  ├── debug@0.7.0  ├── fresh@0.1.0  ├── methods@0.0.1  ├── mkdirp@0.3.3  ├── range-parser@0.0.4  ├─┬ response-send@0.0.1  │ └── crc@0.2.0  └─┬ send@0.0.3    └── mime@1.2.6

环境准备好了,我们可以创建一个应用程序了,在目录下创建一个文件app.js(anyway,名字随便取的,习惯叫app.js),app.js的内容如下:(实际上是载入express框架,让后创建一个应用程序)

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

然后就是定义路由,即响应用户要访问的路径,Express 给这些对象加了一个封装好的方法,比如 res.send(), 它会设置Content-Length,只要调用send方法就好:

app.get('/hello.txt', function(req, res){  res.send('Hello NodeJS!!');});

然后通过执行 app.listen() 来绑定并监听连接:

var server = app.listen(3000, function() {    console.log('Listening on port %d', server.address().port);});

上面3段都是app.js的内容。

然后启动程序,在当前目录下直接打"node app.js"即可:

F:HelloNode>node app.jsListening on port 3000

然后访问http://127.0.0.1:3000/ 即可,界面如下:

Express入门( node.js Web应用框架 )

用Express启动一个nodejs应用程序,so easy!

 

使用express来生成一个应用程序

其实还有更简洁的方法,即用express生成node应用程序的模板,那些文件都不用自己创建,直接一个命令就能把常用的文件和包都装好,这对我们懒人来说真是百年难遇的特大福利。

运行express myapp即可生成如下目录的文件:

Express入门( node.js Web应用框架 )

如上提示,cd mypp && npm install 然后node app即可启动程序。

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

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

 

以上安装的软件均不是全局的,只是在当前目录程序下有用。

错误处理

错误处理的中间件和普通的中间件定义是一样的, 只是它必须有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 });}

 

 

作者:zhoujie
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,不然我担心博客园找你算账
如果您觉得本文对你有帮助,请竖起您的大拇指右下角点推荐,也可以关注我
版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表