Nodejs Nestjs URL缩短服务nestjs-url-shortener的使用

Nodejs Nestjs URL缩短服务nestjs-url-shortener的使用
nestjs-url-shortener 是一个基于 NestJS 的 URL 短链接服务。下面是一个简单的示例来展示如何使用它。

1. 安装

首先,你需要安装 nestjs-url-shortener 包:

npm install nestjs-url-shortener

2. 配置模块

在你的 NestJS 应用中引入 UrlShortenerModule。假设你有一个名为 AppModule 的根模块,你可以这样配置:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UrlShortenerModule } from 'nestjs-url-shortener';

@Module({
  imports: [UrlShortenerModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

3. 使用服务

在你的控制器或服务中注入 UrlShortenerService 并使用它来创建和解析短链接:

import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { AppService } from './app.service';
import { UrlShortenerService } from 'nestjs-url-shortener';

@Controller()
export class AppController {
  constructor(
    private readonly appService: AppService,
    private readonly urlShortenerService: UrlShortenerService,
  ) {}

  @Post('shorten')
  async shorten(@Body() body: { url: string }) {
    const shortUrl = await this.urlShortenerService.create(body.url);
    return { shortUrl };
  }

  @Get(':shortUrl')
  async redirect(@Param('shortUrl') shortUrl: string) {
    const originalUrl = await this.urlShortenerService.get(shortUrl);
    if (originalUrl) {
      return {
        originalUrl,
        redirectUrl: `/redirect/${shortUrl}`,
      };
    }
    throw new NotFoundException('URL not found');
  }
}

4. 实现重定向逻辑

为了实现点击短链接时重定向到原始链接的功能,你可以添加一个新的路由处理程序:

@Get('redirect/:shortUrl')
async redirectToOriginal(@Param('shortUrl') shortUrl: string) {
  const originalUrl = await this.urlShortenerService.get(shortUrl);
  if (originalUrl) {
    return {
      redirectUrl: originalUrl,
    };
  }
  throw new NotFoundException('URL not found');
}

5. 运行应用

现在你可以启动你的 NestJS 应用,并测试这些端点。例如,你可以发送一个 POST 请求到 /shorten 来创建一个短链接,然后通过 GET 请求访问这个短链接来验证重定向是否正常工作。

注意事项

  • 确保你的数据库(如 MongoDB)已经正确配置并连接。
  • 根据你的需求调整错误处理和响应格式。
  • 考虑安全性,比如防止滥用短链接系统。

以上就是如何在 NestJS 中使用 nestjs-url-shortener 创建和管理短链接的基本步骤。希望这对你有所帮助!


3 回复

当然!nestjs-url-shortener 是一个基于 NestJS 的 URL 短链接服务。首先,你需要安装这个库到你的项目中:

npm install nestjs-url-shortener

然后,在你的模块文件(例如:app.module.ts)中引入 UrlShortenerModule

import { Module } from '@nestjs/common';
import { UrlShortenerModule } from 'nestjs-url-shortener';

@Module({
  imports: [
    UrlShortenerModule,
  ],
})
export class AppModule {}

接下来,你可以在控制器中使用 UrlShortenerService 来创建和解析短链接:

import { Controller, Get, Param } from '@nestjs/common';
import { UrlShortenerService } from 'nestjs-url-shortener';

@Controller('urls')
export class UrlController {
  constructor(private readonly urlShortenerService: UrlShortenerService) {}

  @Get(':shortUrl')
  async findOriginalUrl(@Param('shortUrl') shortUrl: string) {
    return this.urlShortenerService.findOriginalUrl(shortUrl);
  }

  @Post()
  async createShortUrl(@Body() body: { originalUrl: string }) {
    return this.urlShortenerService.createShortUrl(body.originalUrl);
  }
}

这样,你就有了一个基本的 URL 短链接服务啦!记得根据实际需求调整代码哦。


NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。下面我将指导你如何创建一个简单的URL缩短服务。我们将使用 NestJS 和一些第三方库来实现这个功能。

第一步:安装 NestJS

首先,确保你已经安装了 Node.js 和 npm。然后,你可以通过以下命令安装 NestJS CLI:

npm i -g @nestjs/cli

第二步:创建新的 NestJS 项目

nest new nestjs-url-shortener
cd nestjs-url-shortener

第三步:安装必要的依赖

我们需要一些库来帮助我们生成和存储缩短后的 URL:

npm install --save @nestjs/common @nestjs/core @nestjs/platform-express @nestjs/swagger @nestjs/mapped-types class-validator class-transformer mongoose
npm install --save shortid

这里我们选择了 shortid 来生成唯一的短网址标识符。

第四步:创建数据模型

src/url/url.model.ts 文件中创建 URL 模型:

export class Url {
    id: string;
    originalUrl: string;
}

第五步:创建服务

创建一个服务来处理 URL 的生成和存储:

nest g service url

src/url/url.service.ts 中添加逻辑:

import { Injectable } from '@nestjs/common';
import * as shortid from 'shortid';

@Injectable()
export class UrlService {
    private urls: Url[] = [];

    generateShortUrl(originalUrl: string): string {
        const newUrl: Url = { id: shortid.generate(), originalUrl };
        this.urls.push(newUrl);
        return newUrl.id; // 返回短ID作为短链接
    }

    findOriginalUrl(shortId: string): Url | undefined {
        return this.urls.find(url => url.id === shortId);
    }
}

第六步:创建控制器

创建一个控制器来处理 HTTP 请求:

nest g controller url

src/url/url.controller.ts 中:

import { Controller, Get, Post, Body, Param, Res } from '@nestjs/common';
import { Response } from 'express';
import { UrlService } from './url.service';

@Controller('urls')
export class UrlController {
    constructor(private readonly urlService: UrlService) {}

    @Post()
    create(@Body() createUrlDto: CreateUrlDto) {
        return this.urlService.generateShortUrl(createUrlDto.originalUrl);
    }

    @Get(':shortId')
    async findOne(@Param('shortId') shortId: string, @Res() res: Response) {
        const url = this.urlService.findOriginalUrl(shortId);
        if (url) {
            res.redirect(url.originalUrl);
        } else {
            res.status(404).send('URL not found');
        }
    }
}

这里我们假设 createUrlDto 是一个包含 originalUrl 字段的对象。

第七步:测试你的 API

启动应用:

npm run start:dev

现在你可以通过 POST 请求发送原始 URL 并获取短链接,也可以通过 GET 请求访问短链接来重定向到原始地址。

以上就是一个基本的 NestJS URL 缩短服务的实现方法。根据需要,你还可以进一步增强它,比如添加数据库持久化等。

nestjs-url-shortener 是一个基于 NestJS 的URL缩短服务。使用它首先需要安装并配置相关依赖。创建一个服务来生成和存储短网址(例如使用雪花算法生成唯一ID,并将原始URL与短地址映射存储)。然后实现接口处理URL的提交、生成、重定向请求。用户提交长URL后,服务端生成对应的短URL返回。当用户访问短URL时,通过查找映射关系重定向到原链接。可以使用数据库如MongoDB持久化存储这些映射关系以保证服务的可靠性和扩展性。

回到顶部