>释放Express 4,创建RESTFUL API变得更加容易。如果要创建一个单页应用程序,则肯定需要一个支持CRUD操作的RESTFUL Web服务。我的最后一个教程重点是用Angular的$资源创建一个单页CRUD应用程序。本教程说明了如何使用Express 4来设计此CRUD应用的后端API
>请注意,自Express 3以来,已更改了很多。本教程并未解释如何将您的应用程序从Express 3升级到Express 4。相反,它将涵盖如何直接使用Express 4创建API。所以,让我们开始吧。>
钥匙要点Express 4简化了RESTFUL API的创建,使为Crud应用程序设计后端API变得更加容易。
- express 4方法express.router()创建一个可以定义中间和路由的新路由器实例。然后可以像其他任何中间件一样在主应用程序中使用此路由器实例。 Express 4支持标准的HTTP方法,例如GET,POST,PUT和DELETE,以在数据库上执行CRUD操作,在这种情况下为电影数据库。这是通过创建处理这些HTTP请求的路由来完成的。 >
- 创建电影应用程序的API
- 我们的应用程序将是一个支持基本CRUD操作的简单电影数据库。我们将Express 4用作Web框架,将Mongoosejs作为对象建模工具。为了存储电影条目,我们将使用mongodb。
- 在进一步前进之前,让我们看看API的外观: >
目录结构
我们将在应用程序中使用以下目录结构:
以上目录结构有一些要点:
bin/www.js用于引导我们的应用程序。
>模型目录存储我们的猫鼬模型。对于此应用程序,我们只有一个名为Movie.js的文件。
>
app.js保存我们的Express App的配置。-
最后,node_modules和package.json是node.js app。
- 获得必要的依赖项
- 为创建API,我们将使用以下模块:
> - express
- >身体解析器
>注意 - 身体偏远者不再是Express Core的一部分。您需要单独下载该模块。因此,我们已经在包装中列出了它。
要获取这些软件包,我们将它们列为package.json中的依赖项。这是我们的软件包。
<span>{ </span> <span>"name": "Movie CRUD API", </span> <span>"version": "0.0.1", </span> <span>"private": true, </span> <span>"scripts": { </span> <span>"start": "node ./bin/www" </span> <span>}, </span> <span>"main":"./bin/www", </span> <span>"engines": { </span> <span>"node": "0.10.x" </span> <span>}, </span> <span>"dependencies": { </span> <span>"express": "~4.2.0", </span> <span>"body-parser": "~1.0.0", </span> <span>"mongoose": "~3.8.11" </span> <span>} </span><span>}</span>只需运行npm安装,所有依赖项将被下载并放置在node_modules目录下。
创建模型
>由于我们正在为电影数据库构建API,因此我们将创建一个电影模型。创建一个名为Movie.js的文件,然后将其放入模型目录中。该文件的内容(如下所示)创建了一个Mongoose模型。
>
<span>var mongoose=require('mongoose'); </span><span>var Schema=mongoose.<span>Schema</span>; </span> <span>var movieSchema = new Schema({ </span> <span>title: String, </span> <span>releaseYear: String, </span> <span>director: String, </span> <span>genre: String </span><span>}); </span> module<span>.exports = mongoose.model('Movie', movieSchema);</span>>在上一个片段中,我们创建了一个新型号,电影。每部电影都有与之相关的四个属性 - 标题,发行年,导演和流派。最后,我们将模型放在模块中。exports,以便我们可以从外部访问它。
>
创建路由>我们的所有路线都在路线/电影中。首先,将以下内容添加到您的电影。
Express 4具有一个名为Express.Router()的新方法,该方法为我们提供了一个新的路由器实例。它可用于定义中间和路线。关于快速路由器的有趣观点是它就像一个迷你应用程序一样。您可以使用此路由器来定义中间Wares和路线,然后像其他任何中间件一样在主应用中使用它。
获得所有电影<span>var Movie = require('../models/movie'); </span><span>var express = require('express'); </span><span>var router = express.<span>Router</span>();</span>
用户将get请求发送到 /api /电影时,我们应该向他们发送包含所有电影的响应。这是为此创建路线的片段。
router.route()返回一个单个路由实例,该实例可用于配置一个或多个HTTP动词。在这里,我们要支持GET请求。因此,我们调用get()并传递回调,该回调将在请求到达时被调用。在回调中,我们使用Mongoose检索所有电影,并将其发送回客户端以JSON。
创建新电影
router<span>.route('/movies').get(function(req<span>, res</span>) { </span> <span>Movie.find(function(err<span>, movies</span>) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.json(movies); </span> <span>}); </span><span>});</span>>我们的API应在发布 /api /电影的发布请求时在数据库中创建新电影。必须将JSON字符串作为请求主体发送。我们将使用相同的路线 /电影,但使用方法post()而不是get()。
这是代码:
>在这里,我们从请求主体创建了一个新的电影实例。这是使用身体较好者的地方。然后,我们只保存新电影并发送一个响应,表明操作成功。
>请注意,方法get(),post()等。返回相同的路由实例。因此,您实际上可以链接前两个电话,如下所示。
>router<span>.route('/movies').post(function(req<span>, res</span>) { </span> <span>var movie = new Movie(req.body); </span> movie<span>.save(function(err) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.send({ message: 'Movie Added' }); </span> <span>}); </span><span>});</span>
更新电影
如果用户想更新电影,则需要将PUT请求发送到/api/Movie/:ID,并以JSON字符串作为请求主体。我们使用命名参数:ID访问现有电影。当我们使用MongoDB时,我们所有的电影都有一个唯一的标识符,称为_id。因此,我们只需要检索参数:ID并使用它来查找特定的电影。执行此操作的代码如下所示。
><span>{ </span> <span>"name": "Movie CRUD API", </span> <span>"version": "0.0.1", </span> <span>"private": true, </span> <span>"scripts": { </span> <span>"start": "node ./bin/www" </span> <span>}, </span> <span>"main":"./bin/www", </span> <span>"engines": { </span> <span>"node": "0.10.x" </span> <span>}, </span> <span>"dependencies": { </span> <span>"express": "~4.2.0", </span> <span>"body-parser": "~1.0.0", </span> <span>"mongoose": "~3.8.11" </span> <span>} </span><span>}</span>
>在这里,我们创建一个新的路由 /电影 /:ID并使用方法put()。 Movie.findone的调用({_id:req.params.id})用于查找在URL中传递的ID的电影。有了电影实例后,我们将根据请求正文中的JSON进行更新。最后,我们保存了这部电影并向客户发送回复。
>检索电影
要阅读一部电影,用户需要将get请求发送到路由/api/movies/:id。我们将使用与上述相同的路线,但是这次使用get()。
><span>var mongoose=require('mongoose'); </span><span>var Schema=mongoose.<span>Schema</span>; </span> <span>var movieSchema = new Schema({ </span> <span>title: String, </span> <span>releaseYear: String, </span> <span>director: String, </span> <span>genre: String </span><span>}); </span> module<span>.exports = mongoose.model('Movie', movieSchema);</span>
>代码的其余部分非常简单。我们根据传递的ID检索电影并将其发送给用户。
>删除电影
要删除电影,用户应将删除请求发送到/api/tovers/:id。同样,该路线与上面相同,但是方法是不同的(即delete())。
><span>var Movie = require('../models/movie'); </span><span>var express = require('express'); </span><span>var router = express.<span>Router</span>();</span>
> Method Movie.Remove()从数据库中删除了一部电影,我们向用户发送一条消息,指示成功。
>>现在我们都设置了。但是等等!我们需要将路由器实例放在模块中。Exports,以便我们可以在应用中将其用作Middlewaree。因此,这是文件电影中的最后一行。
router<span>.route('/movies').get(function(req<span>, res</span>) { </span> <span>Movie.find(function(err<span>, movies</span>) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.json(movies); </span> <span>}); </span><span>});</span>>配置应用程序
我们所有的配置都进入app.js。我们首先需要必要的模块:
router<span>.route('/movies').post(function(req<span>, res</span>) { </span> <span>var movie = new Movie(req.body); </span> movie<span>.save(function(err) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.send({ message: 'Movie Added' }); </span> <span>}); </span><span>});</span>下一步是通过mongoose连接到mongodb:
最后,我们配置了中间件:
router<span>.route('/movies') </span> <span>.get(function(req<span>, res</span>) { </span> <span>Movie.find(function(err<span>, movies</span>) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.json(movies); </span> <span>}); </span> <span>}) </span> <span>.post(function(req<span>, res</span>) { </span> <span>var movie = new Movie(req.body); </span> movie<span>.save(function(err) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.send({ message: 'Movie Added' }); </span> <span>}); </span> <span>});</span>
如您所见,我像其他任何中间件一样使用了路由器。我将 /API作为第一个参数to app.use(),以便将路由中间件映射到 /api。因此,最终我们的API URL变为:
router<span>.route('/movies/:id').put(function(req<span>,res</span>){ </span> <span>Movie.findOne({ _id: req.params.id }, function(err<span>, movie</span>) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> <span>for (prop in req.body) { </span> movie<span>[prop] = req.body[prop]; </span> <span>} </span> <span>// save the movie </span> movie<span>.save(function(err) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.json({ message: 'Movie updated!' }); </span> <span>}); </span> <span>}); </span><span>});</span>
/api/电影
- /api/movers/:id
- >引导
通过运行节点bin/www.js,您的api应该升起!
router<span>.route('/movies/:id').get(function(req<span>, res</span>) { </span> <span>Movie.findOne({ _id: req.params.id}, function(err<span>, movie</span>) { </span> <span>if (err) { </span> <span>return res.send(err); </span> <span>} </span> res<span>.json(movie); </span> <span>}); </span><span>});</span>测试API
>现在我们已经创建了API,我们应该对其进行测试,以确保所有内容都按预期工作。您可以使用邮递员(Chrome Extension)来测试所有端点。以下是一些屏幕截图,显示帖子并在Postman中进行了测试。
>
结论
该应用程序的源代码可在GitHub上下载。
>经常询问有关使用Express 4
创建RESTFUL API的问题(常见问题解答)> RESTFUL API与其他类型的API之间有什么区别?
RESTFUL API或代表性状态转移API是一种遵守REST架构风格原理的API。它们是无状态的,这意味着从客户端到服务器的每个请求都必须包含了解和处理请求所需的所有信息。这与其他类型的API不同,例如SOAP,这些API可以在请求之间保持状态。 RESTFUL API还使用标准的HTTP方法,例如GET,POST,PUT,DELETE,使其易于理解和使用。 4,您可以使用app.get()方法创建基本路由。此方法采用两个参数:路径和回调函数。每当向指定路径提出Get请求时,都会执行回调功能。这是一个示例:app.get('/',function(req,res){
res.send('Hello world!');});
在此示例中,向根路径('/')提出了get请求,服务器将以“ Hello World!”响应“ Hello World!”。
如何处理Express 4?
app.post('/',function(req,res){
res.send('post request rectory');});
什么是Express 4中的中间件,我如何使用它? >中间件功能是可以访问请求对象(REQ),响应对象(RES)和应用程序请求响应周期中的下一个功能的函数。下一个功能是Express路由器中的一个函数,当调用时,该功能将执行成功当前中间件的中间件。中间件函数可以执行以下任务:执行任何代码,对请求和响应对象进行更改,结束请求响应周期,调用堆栈中的下一个中间件。
如何处理Express中的错误4?
app.use(function(err,req,res,sext){
console.error(err.stack);>如何在Express 4个路由中使用参数?
您可以使用路由参数捕获URL中的动态值。然后,您的路由处理程序可以使用这些值。这是一个示例:
app.get('//users/:userId',function(req,res){
res.send('用户ID是:'req.params.userid);
} );
在此示例中,当向“/用户/123”提出Get请求时,服务器将使用“用户ID为:123”。 Express 4?
express 4提供了用于服务静态文件的内置中间件功能,express.static()。您可以使用它从服务器上的目录中使用文件。以下是一个示例:
app.use(express.static('public'));在此示例中,可以直接从root url('/')中直接访问'public''目录中的文件。
>如何在Express 4?
> app.use(bodyparser.urlenceded({extended:true}) );
在此示例中,将身体较低的中间件配置为解析JSON和URL编码的身体。
>如何我是否可以在Express 4?
中处理404个错误,您可以通过在中间件堆栈的末尾添加中间件功能来处理404错误。如果没有其他路由处理程序或中间件功能处理该请求,将执行此功能。这是一个示例:
app.use(function(req,res,sext){
}); 在此示例中,如果向不存在的路径提出请求,则服务器将以404的状态代码响应,并发出一条“对不起,我们找不到的消息!”。我如何使用Express Express 4?
> Express路由器中的路由器是Express 4中的迷你应用程序,可让您以模块化的方式组织路线。您可以使用Express.Router()创建一个新路由器,向其添加中间件和路由,然后在App.use()中使用它。这是一个示例:
var router = express.router();
router.get('/',function(req,res){
res.send('Router!'Hello!');
app.use('/Router',Router);
在此示例中,当向'/Router提出GET请求时,服务器将响应“路由器的你好!”。以上是用Express 4创建静止的API的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

利用轻松的网页布局:8个基本插件 jQuery大大简化了网页布局。 本文重点介绍了简化该过程的八个功能强大的JQuery插件,对于手动网站创建特别有用

因此,在这里,您准备好了解所有称为Ajax的东西。但是,到底是什么? AJAX一词是指用于创建动态,交互式Web内容的一系列宽松的技术。 Ajax一词,最初由Jesse J创造

10款趣味横生的jQuery游戏插件,让您的网站更具吸引力,提升用户粘性!虽然Flash仍然是开发休闲网页游戏的最佳软件,但jQuery也能创造出令人惊喜的效果,虽然无法与纯动作Flash游戏媲美,但在某些情况下,您也能在浏览器中获得意想不到的乐趣。 jQuery井字棋游戏 游戏编程的“Hello world”,现在有了jQuery版本。 源码 jQuery疯狂填词游戏 这是一个填空游戏,由于不知道单词的上下文,可能会产生一些古怪的结果。 源码 jQuery扫雷游戏

本教程演示了创建通过Ajax加载的动态页面框,从而可以即时刷新,而无需全页重新加载。 它利用jQuery和JavaScript。将其视为自定义的Facebook式内容框加载程序。 关键概念: Ajax和JQuery

本教程演示了如何使用jQuery创建迷人的视差背景效果。 我们将构建一个带有分层图像的标题横幅,从而创造出令人惊叹的视觉深度。 更新的插件可与JQuery 1.6.4及更高版本一起使用。 下载

此JavaScript库利用窗口。名称属性可以管理会话数据,而无需依赖cookie。 它为浏览器中存储和检索会话变量提供了强大的解决方案。 库提供了三种核心方法:会话


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。