专栏名称: 前端JavaScript
分享 | 学习 | 交流 | 原创 分享是学习的开始;学习不必要从头开始,是从现在开始;交流能沟通你我,提高你的学识;期待你的加入!!! web前端技术交流,JavaScript,HTML5,CSS3……
目录
相关文章推荐
51好读  ›  专栏  ›  前端JavaScript

【第3章第358回】基于 TypeScript 的 Node.js 框架 Nest 正式版发布!(上...

前端JavaScript  · 公众号  · Javascript  · 2017-06-01 06:43

正文

请到「今天看啥」查看全文




在上一节中,我们为应用程序设置了入口点。现在,让我们来构建我们的第一个文件路径 /users:


import { Controller, Get, Post } from '@nestjs/common';


@Controller()

export class UsersController {

@Get('users')

getAllUsers() {}


@Get('users/:id')

getUser() {}


@Post('users')

addUser() {}

}

正如你猜想的,我们刚刚创建了一个具有 3 种不同路径的路由:


GET: users

GET: users/:id

POST: users

没有必要重复 users 的每个路径了吧?


Nest 允许我们将额外的元数据传递给 @Controller()  装饰器 - 路径,这是每个路由的前缀。让我们重写我们的控制器:


@Controller('users')

export class UsersController {

@Get()

getAllUsers(req, res, next) {}


@Get('/:id')

getUser(req, res, next) {}


@Post()

addUser(req, res, next) {}

}

正如你看到的, Nest 控制器中的方法和 Express 中的简单路由具有相同的参数列表和行为。


如果你想了解更多关于 req (请求),res(响应)和 next,你可以阅读简短的路由文档。在 Nest 中,它们是等价的。


但是有一个重要的区别。 Nest 提供了一组自定义的装饰器,你可以使用它们来标记参数。

你可以这样使用它们:


@Get('/:id')

public async getUser(@Response() res, @Param('id') id) {

const user = await this.usersService.getUser(id);

res.status(HttpStatus.OK).json(user);

}

记住在文件的开头导入装饰器。


import { Response, Param } from '@nestjs/common';

UsersController 可以使用,但是我们的模块还不知道。让我们打开 ApplicationModule 并添加一些元数据。


import { Module } from '@nestjs/common';

import { UsersController } from "./users.controller";


@Module({

controllers: [ UsersController ]

})

export class ApplicationModule {}

你可以看到,我们只需要将 controller 插入 controllers 数组中,这就够了。


组件(Components)

几乎所有的东西都是组件,Service, Repository, Provider等等。并且他们可以通过构造函数注入控制器或另一组件。



在上一节中, 我们构建了一个简单的 controller,UsersController。这个 controller 可以访问我们的数据(我知道这是一个假数据,但这并不重要)。这不是一个很好的解决方案。我们的控制器只能处理 HTTP 请求,并将更复杂的任务委托给服务(services),这就是为什么我们要创建 UsersService 组件。


实际上,UsersService 应该从持久层调用适当的方法,例如, UsersRepository 组件。我们没有任何类型的数据库,所以我们再次使用假数据。


import { Component } from '@nestjs/common';

import { HttpException } from '@nestjs/core';


@Component()

export class UsersService {

private users = [

{ id: 1, name: "John Doe" },

{ id: 2, name: "Alice Caeiro" },

{ id: 3, name: "Who Knows" },

];

getAllUsers() {

return Promise.resolve(this.users);

}

getUser(id: number) {

const user = this.users.find((user) => user.id === id);







请到「今天看啥」查看全文