`

NodeJS框架express的HTTP方法和错误处理

阅读更多

HTTP方法

在CSSer前面的文章中我们已经接触过app.get()多次了,同时Express也提供了对其它HTTP动作的封装,如app.post(), app.del()等。

对于POST最常见的例子,就是当我们提交一个表单时,下面我们在HTML中将表单的method特性设置为“post”,然后需要在服务端定义对该表单提交的路由控制。

<form method="post" action="/">
    <input type="text" name="user[name]" />
    <input type="text" name="user[email]" />
    <input type="submit" value="Submit" data-description="csser.com" />
</form>

默认情况下Express并不知道该如何处理该请求体,因此我们需要增加bodyParser中间件,用于分析application/x-www-form-urlencoded和application/json请求体,并把变量存入req.body。我们可以像下面的样子来“使用”中间件:

app.use(express.bodyParser());

接下来下面的路由就可以访问req.body.user对象了,该对象包含客户端提交的name和email属性。

app.post('/', function(req, res){
  console.log(req.body.user);
  res.redirect('back');
});

要在表单中使用PUT的HTTP方法,我们可以利用名为_method的隐藏表单域,它能改变HTTP方法。而在服务端,我们首先需要利用methodOverride中间件,把它放在bodyParser中间件下方,从而可以利用包含表单值的req.body。

app.use(express.bodyParser());
app.use(express.methodOverride());

之所以需要这样做,是因为这些处理并不总是默认进行的,原因很简单,因为这些对Express的整体功能来说并不是必需的,依据应用的具体需求,你并不一定需要这些功能,如果客户端直接支持PUT和DELETE方法也可以被直接访问到,同时methodOverride为表单提供了强大的解决方案,下面我们展示下PUT的使用:

<form method="post" action="/">
  <input type="hidden" name="_method" value="put" />
  <input type="text" name="user[name]" />
  <input type="text" name="user[email]" />
  <input type="submit" value="Submit" />
</form>

app.put('/', function(){
    console.log(req.body.user);
    res.redirect('back');
});

错误处理

Express提供了app.error()方法来接收路由或传入next(err)的异常,下面的示例为不同的页面提供专门的NotFound异常服务:

function NotFound(msg){
  this.name = 'NotFound in csser.com';
  Error.call(this, msg);
  Error.captureStackTrace(this, arguments.callee);
}

NotFound.prototype.__proto__ = Error.prototype;

app.get('/404', function(req, res){
  throw new NotFound;
});

app.get('/500', function(req, res){
  throw new Error('keyboard cat!');
});

像下面一样,我们可以多次调用app.error(),这里我们检查如果是NotFound实例就显示404页面,否则将其传入下一个错误处理。

注意这些处理可以定义在任何地方,它们可以放在路由可以listen()之处。这也允许在configure()块内做定义,于是我们就可以以不同的基于环境的方式处理异常。

app.error(function(err, req, res, next){
    if (err instanceof NotFound) {
        res.render('404.jade');
    } else {
        next(err);
    }
});

下面的演示我们假设所有错误都为500错误,但你可以根据喜好选择。例如当node在处理文件系统调用时,就有可能接收到这样的错误对象,其ENOENT的error.code为“no such file or directory”,这时我们可以在错误处理函数中进行处理然后显示特定的页面给用户。

app.error(function(err, req, res){
   res.render('500.jade', { error: err });
});

我们的应用也可以利用Connect errorHandler中间件来汇报异常信息。例如我们想在“开发”环境输出异常到stderr:

app.use(express.errorHandler({ dumpExceptions: true }));

同时在开发期间我们想用好看的HTML页面显示异常信息时,可以设置showStack的值为true:

app.use(express.errorHandler({ showStack: true, dumpExceptions: true }));

如果请求头支持application/json,errorHandler中间件也能以json方式做出响应,这对依赖于客户端Javascript的应用开发很有益处。

分享到:
评论

相关推荐

    nodeJS中express框架和mysql简单的连接demo

    这个“nodeJS中express框架和mysql简单的连接demo”项目,旨在演示如何将两者结合,实现在Web应用中与数据库进行交互,包括向数据库插入数据和查询数据。 首先,你需要确保已经安装了以下Node.js相关的依赖库: 1. ...

    nodejs之express框架源码

    - 错误处理中间件是专门用来捕获和处理程序中的错误,通常放在中间件链的最后。 - 可以通过四参数形式的中间件(err, req, res, next)来处理异常。 6. **静态文件服务** - Express内置了静态文件服务功能,允许...

    vue+nodejs+express+mybatis

    4. 错误处理:支持全局和局部错误处理器,方便异常捕获和处理。 **MyBatis** 是一个Java的持久层框架,专注于SQL映射和数据库操作。MyBatis的主要功能有: 1. 映射SQL:通过XML或注解方式将Java对象与SQL语句关联,...

    NodeJS+Express+MongoDB简单博客系统

    **NodeJS + Express + MongoDB 简单博客系统** 这个项目是一个基于Node.js、Express.js框架和MongoDB数据库构建的简单博客系统。它为初学者提供了一个很好的平台,以了解和实践Web开发中的服务器端编程、路由处理...

    nodejs+express+mysql起步学习demo:待完善.zip

    在IT行业中,Node.js、Express和MySQL是三个非常重要的技术组件,它们共同构成了一个常见的Web开发框架。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,使得开发者可以在服务器端使用JavaScript进行开发。...

    nodejs+Express+mssql

    - `models`目录:可能包含数据库模型,定义了与SQL Server交互的实体和方法。 - `routes`目录:包含了不同路由的处理逻辑,比如CRUD操作。 - `config`文件:包含了数据库连接配置。 - `package.json`:项目依赖和元...

    nodejs_express_module

    此外,Express 还提供了错误处理机制,使得开发过程中能更好地捕获和处理异常。 总之,"nodejs_express_module" 旨在帮助开发者在遇到网络障碍时,仍能顺利部署和使用 Express 框架,从而实现快速构建 Node.js 后端...

    nodejs+express+mysql后台框架

    同时,利用npm(Node.js的包管理器)管理和安装项目所需的额外模块,可以进一步扩展框架的功能,例如添加身份验证、日志记录、错误处理等特性。 总的来说,这个"nodejs+express+mysql后台框架"提供了一个简洁、高效...

    nodejs做的一个树形菜单框架和数据库文件

    在这个特定的项目中,"nodejs做的一个树形菜单框架和数据库文件"是一个利用Node.js构建的系统,它实现了树形菜单结构,这种结构常用于Web应用程序的左侧导航栏,以组织和展示多级的菜单项。用户可以通过点击这些菜单...

    NodeJS入门项目案例(Express+Mysql)

    在本项目中,你将学习如何安装和配置Express,以及如何使用它来定义路由、处理HTTP请求和响应。 首先,我们需要安装Node.js环境,这是运行所有Node.js应用程序的基础。然后,通过npm(Node.js包管理器)安装Express...

    nodejs + express + mysql demo

    总结,"nodejs + express + mysql demo"展示了如何使用Node.js、Express和MySQL来创建一个简单的Web应用,包括连接数据库、处理HTTP请求、以及构建数据API。通过这个示例,你可以学习到Node.js的非阻塞I/O、Express...

    nodejs+express+mysql学习nodejs的小项目.zip

    在本项目中,“nodejs+express+mysql学习nodejs的小项目”是一个初学者友好的教程,旨在帮助开发者了解如何使用Node.js、Express框架以及MySQL数据库来构建Web应用程序。这个压缩包可能包含了源代码、配置文件和其他...

    nodejs+express入门小例子

    7. **错误处理**:最后,应用通常会包含全局错误处理中间件,确保即使发生错误,也能向客户端发送合适的响应,而不是导致应用崩溃。 通过这个小例子,初学者可以学习到如何组织Node.js + Express项目,了解中间件的...

    本文主要介绍NodeJS+Express+Mysql实现用户登录和注册。此登录注册的方式为ge

    Express是基于Node.js的一个Web应用框架,它简化了HTTP请求和响应的处理,提供了许多中间件来处理路由、视图系统、静态文件服务等,大大降低了开发复杂度。 MySQL则是一个关系型数据库管理系统,广泛应用于存储和...

    nodejs+express实现增删改查

    6. **错误处理**:在Express应用中,通常会添加全局错误处理中间件来捕获未处理的错误并返回适当的响应。 以上就是使用Node.js+Express实现数据增删改查的基本步骤。实际项目中可能需要考虑更多细节,如验证、分页...

    nodejs+express4示例

    9. **错误处理**:学习如何设置全局错误处理器来捕获未被前面中间件处理的错误,确保程序的健壮性。 10. **测试与调试**:了解如何使用像 Mocha 和 Chai 这样的测试框架编写单元测试和集成测试,以及如何利用 Node....

    node.js express框架

    5. 错误处理:Express提供了一种优雅的方式来处理应用中的错误,通过使用专门的错误处理中间件,可以在全局范围内捕获并处理异常。 二、PM2部署实战 1. PM2简介:PM2是Node.js的进程管理工具,它可以保持应用在...

    踏上nodejs的不归路——02express框架的引入与使用(1)

    本文将深入探讨“踏上nodejs的不归路——02express框架的引入与使用(1)”这一主题,带你初探Express的魅力。 首先,我们需要了解什么是Express。Express是基于Node.js平台的Web应用框架,它是对Node.js内置的http...

    2018年1月9日新版支付宝nodejs+Express Demo

    Express提供了方便的错误处理中间件,帮助开发者捕获和处理这些异常。 八、部署与测试 最后,完成开发后,需要将应用部署到服务器上,并进行测试。这包括本地测试、模拟支付测试以及线上环境的测试,确保所有功能...

    nodejs express模块

    2. **错误处理中间件**:放置在其他中间件之后,专门处理错误。 ```javascript app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send('Something broke!'); }); ``` ###...

Global site tag (gtag.js) - Google Analytics