开始使用MEVN技术栈开发04 使用express编写后端服务

发布时间:2024年01月02日

开始使用MEVN技术栈开发04 编写后端服务

编写后端服务

Now, its time to create the backend server! But before we do, because we are using ES6’s import statement, add into package.json the below line:
现在,是时候创建后台服务器了!在此之前,由于我们使用的是 ES6 的 import 语句,请在 package.json 中添加以下一行:

"type": "module",

修改以后,package.json中的完整代码如下:

{
  "name": "backend",
  "version": "1.0.0",
  "description": "",
  "type": "module",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "cors": "^2.8.5",
    "dotenv": "^16.3.1",
    "express": "^4.18.2",
    "mongodb": "^6.3.0"
  }
}

That will use the import statements from ES6.
这将使用 ES6 中的导入语句。

Now, in the backend folder, create a new file Index.js with the following code:
现在,在后台文件夹中创建一个新文件 index.js,其中包含以下代码:

import express from 'express';
import cors from 'cors';
import MoviesRoute from './api/MoviesRoute.js';

// 首页类
class Index {
    // 创建应用
    static app = express();
    // 创建路由
    static router = express.Router();
    // 入口方法
    static main() {
        Index.setUpServer();
    }
    // 设置服务
    static setUpServer() {
        // 使用跨域中间件
        Index.app.use(cors());
        // 使用JSON中间件
        Index.app.use(express.json());
        // 配置路由
        Index.app.use('/api/v1/movies', MoviesRoute.configRoutes(Index.router));
        // 配置404页面
        Index.app.use('*', (req, res) => {
            res.status(404).json({ error: 'not found' });
        });
    }
}

// 执行main方法
Index.main();

代码解释

import express from 'express';
import cors from 'cors';
import MoviesRoute from './api/MoviesRoute.js';

We first import the express and cors middleware. We also import MoviesRoute.js, a separate file we create later to store our movies routes. We then create an Index class. This will be our entry point to the application. The Index class contains the next elements:
我们首先导入 express 和 cors 中间件。我们还导入了 MoviesRoute.js,这是我们稍后创建的一个单独文件,用于存储我们的电影路由。然后,我们创建一个索引类。这将是我们应用程序的入口。索引类包含以下元素:

A static attribute called app, which creates the server:
名为 app 的静态属性,用于创建服务器:

static app = express();

Another static attribute called router, which provides access to express router:
另一个名为路由器的静态属性提供了对快递路由器的访问:

static router = express.Router();

A static method called main() to define the application flow of execution. For now, we only invoke another method called setUpServer():
一个名为 main() 的静态方法,用于定义应用程序的执行流程。目前,我们只调用另一个名为 setUpServer() 的方法:

static main() {
    Index.setUpServer();
}

setUpServer() configures the server execution. In it, we attach the cors and express.json middleware that express will use with:
setUpServer() 配置服务器的执行。在其中,我们附加了 express 将使用的 cors 和 express.json 中间件:

Index.app.use(cors());
Index.app.use(express.json());

express.json is the JSON parsing middleware to enable the server to read and accept JSON in a request’s body.
express.json 是一个 JSON 解析中间件,使服务器能够读取和接受请求正文中的 JSON。

Note: Middleware are functions that Express executes in the middle after the incoming request and before the output. Middlewares might make changes to the request and response objects. The use function registers a middleware with our Express app. With Index.app.use(express.json()), the express.json() middleware let’s us retrieve data from a request via the body attribute. We shall see this in code later on.
注意:中间件是 Express 在接收请求之后、输出之前在中间执行的函数。中间件可能会更改请求和响应对象。使用函数将中间件注册到我们的 Express 应用程序中。通过 Index.app.use(express.json()),express.json() 中间件可以让我们通过 body 属性从请求中获取数据。稍后我们将在代码中看到这一点。

Without this middleware, data retrieval would be much more difficult.
如果没有这个中间件,数据检索将更加困难。

We then specify the initial routes:
然后,我们指定初始路由:

Index.app.use('/api/v1/movies', MoviesRoute.configRoutes(Index.router));
Index.app.use('*', (req, res) => {
    res.status(404).json({ error: 'not found' });
});

The general convention for API urls is to begin it with: /api/. And since our API is about movies, the main URL for our app will be i.e. localhost:5000/api/v1/movies. The subsequent specific routes are specified in the 2nd argument MoviesRoute.configRoutes(Index.router).
API 网址的一般惯例是以 /api/<版本号>。由于我们的 API 是关于电影的,因此应用程序的主 URL 将是 localhost:5000/api/v1/movies。随后的特定路由在第二个参数 MoviesRoute.configRoutes(Index.router) 中指定。

If someone tries to go to a route that doesn’t exist, the wild card route Index.app.use( ‘ * ’ ) returns a 404 page with the ‘not found’ message.
如果有人试图访问不存在的路由,通配符路由 Index.app.use( ’ * ’ ) 会返回一个带有 "未找到 "信息的 404 页面。

Index.main();

We then invoke the Index.main() static method, to initialize the application execution.
然后,我们调用 Index.main() 静态方法,初始化应用程序的执行。

说明

本文翻译自《Beginning MEVN Stack Development (MongoDB, Express, Vue, Node.js) (Greg Lim, Daniel Correa)》一书,加上了一些自己的理解。特别是代码部分,可能会大量的重写,练习等。

如果想要原版电子书可以留言。

如果涉及到侵权,请联系我删掉。

如果您有想要翻译的英文书籍,请联系我,我可以代为翻译。

如果您想要学习更多的编程知识,可以购买我的视频课,直播课,或者私教课。

如果您有想要开发的软件项目,可以联系我,我可以代为开发。

如果您是学生,有解决不了的编程问题,可以联系我,我可以代为解决。

如果您是程序员,在企业内有解决不了的难题,可以联系我,兴许我可以提供一些建议。

我是张大鹏,“Python私教” 的创始人,全栈工程师,著有zdppy和zdpgo两个跨语言的全栈开发框架,如果您对我的框架感兴趣,可以联系我,需要说明的是,这两个框架不是开源的,需要付费购买,但是可以试用,保证能够提高您的开发效率。

其他… 生活不易,如果您有闲钱,麻烦打赏我一点吧,1块不嫌少,20刚刚好,100不嫌多,1000… 就想想吧~

文章来源:https://blog.csdn.net/qq_37703224/article/details/135338415
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。