首页 > web前端 > js教程 > 用Express 4创建静止的API

用Express 4创建静止的API

Jennifer Aniston
发布: 2025-02-21 09:57:11
原创
1022 人浏览过

用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要求分别下载Body-Parser,因为它不再是Express Core的一部分。该模块用于解析传入的请求主体,允许通过req.body访问邮政请求的正文。
  • express 4方法express.router()创建一个可以定义中间和路由的新路由器实例。然后可以像其他任何中间件一样在主应用程序中使用此路由器实例。 Express 4支持标准的HTTP方法,例如GET,POST,PUT和DELETE,以在数据库上执行CRUD操作,在这种情况下为电影数据库。这是通过创建处理这些HTTP请求的路由来完成的。
  • >
  • 创建电影应用程序的API
  • 我们的应用程序将是一个支持基本CRUD操作的简单电影数据库。我们将Express 4用作Web框架,将Mongoosejs作为对象建模工具。为了存储电影条目,我们将使用mongodb。
  • 在进一步前进之前,让我们看看API的外观:
  • >

目录结构

我们将在应用程序中使用以下目录结构:

用Express 4创建静止的API

以上目录结构有一些要点:

bin/www.js用于引导我们的应用程序。

>模型目录存储我们的猫鼬模型。对于此应用程序,我们只有一个名为Movie.js的文件。用Express 4创建静止的API

路线目录将存储所有快速路由。

>

app.js保存我们的Express App的配置。>
    最后,node_modules和package.json是node.js app。
  1. 获得必要的依赖项
  2. 为创建API,我们将使用以下模块:>
  3. express
  4. >身体解析器
  5. mongoose

>注意 - 身体偏远者不再是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,bootstraps我们的应用程序:

通过运行节点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中进行了测试。

>

用Express 4创建静止的API

结论用Express 4创建静止的API

>这是如何通过节点和Express轻松创建Restful API的基本概述。如果您想深入研究Express,请务必查看他们的文档。如果您想添加或询问某些内容,请随时发表评论。

该应用程序的源代码可在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?

发布请求Express 4,您可以使用app.post()方法。此方法与app.get()相似,但用于发布请求而不是获得请求。以下是一个示例:

app.post('/',function(req,res){

res.send('post request rectory');

});
什么是Express 4中的中间件,我如何使用它? >中间件功能是可以访问请求对象(REQ),响应对象(RES)和应用程序请求响应周期中的下一个功能的函数。下一个功能是Express路由器中的一个函数,当调用时,该功能将执行成功当前中间件的中间件。中间件函数可以执行以下任务:执行任何代码,对请求和响应对象进行更改,结束请求响应周期,调用堆栈中的下一个中间件。
如何处理Express中的错误4?

express 4提供了一个内置错误处理程序,该处理程序会处理应用程序中可能发生的任何错误。如果需要处理特定错误,则可以创建自己的错误处理中间件功能。以下是一个示例:

app.use(function(err,req,res,sext){

console.error(err.stack); });在此示例中,如果在应用中发生错误,则将记录到控制台,服务器将以500的状态代码和一条消息响应‘有些东西破裂!'。

>如何在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? var bodyparser = require('body-parser');

app.use(bodyparser.json());

> app.use(bodyparser.urlenceded({extended:true}) );

在此示例中,将身体较低的中间件配置为解析JSON和URL编码的身体。


>如何我是否可以在Express 4?

中处理404个错误,您可以通过在中间件堆栈的末尾添加中间件功能来处理404错误。如果没有其他路由处理程序或中间件功能处理该请求,将执行此功能。这是一个示例:
app.use(function(req,res,sext){

res.status(404).send('对不起,我们找不到!');

}); 在此示例中,如果向不存在的路径提出请求,则服务器将以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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板