用Express 4创建静止的API
>释放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>
创建模型
>由于我们正在为电影数据库构建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>
>
创建路由>我们的所有路线都在路线/电影中。首先,将以下内容添加到您的电影。
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>
这是代码:
>在这里,我们从请求主体创建了一个新的电影实例。这是使用身体较好者的地方。然后,我们只保存新电影并发送一个响应,表明操作成功。
>请注意,方法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>
最后,我们配置了中间件:
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,我们应该对其进行测试,以确保所有内容都按预期工作。您可以使用邮递员(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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...
