Nodejs短网址系统

Nodejs短网址系统

目的是实现一个“最”高效的短网址系统。 demo:http://qr.cc/

7 回复

Node.js 短网址系统

目的

本文将介绍如何使用 Node.js 构建一个高效且简洁的短网址系统。我们将通过几个关键步骤来完成这个系统,包括生成短链接、存储和检索这些链接以及处理重定向请求。

示例代码

首先,我们需要安装一些必要的依赖库。可以使用 express 来快速搭建 HTTP 服务器,mongoose 来操作 MongoDB 数据库。

npm install express mongoose short-uuid

接下来,我们创建基本的 Express 应用程序和数据库模型:

// app.js
const express = require('express');
const mongoose = require('mongoose');
const ShortUUID = require('short-uuid');

const app = express();
app.use(express.json());

const uuid = new ShortUUID();

// 连接 MongoDB
mongoose.connect('mongodb://localhost:27017/shorturl', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

// 定义数据模型
const LinkSchema = new mongoose.Schema({
  originalUrl: String,
  shortCode: String
});

const Link = mongoose.model('Link', LinkSchema);

// 生成短链接
function generateShortCode() {
  return uuid.new();
}

// 创建新链接
app.post('/api/links', async (req, res) => {
  const { originalUrl } = req.body;
  const shortCode = generateShortCode();
  
  try {
    const link = new Link({ originalUrl, shortCode });
    await link.save();
    res.json({ shortUrl: `http://yourdomain.com/${shortCode}` });
  } catch (error) {
    res.status(500).send(error.message);
  }
});

// 处理重定向
app.get('/:code', async (req, res) => {
  const { code } = req.params;

  try {
    const link = await Link.findOne({ shortCode: code });
    if (link) {
      res.redirect(link.originalUrl);
    } else {
      res.status(404).send('Short URL not found.');
    }
  } catch (error) {
    res.status(500).send(error.message);
  }
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

解释

  1. 生成短链接:我们使用 short-uuid 库生成唯一的短码。
  2. 创建新链接:当用户提交原始链接时,我们将其保存到 MongoDB,并返回生成的短链接。
  3. 处理重定向:当用户访问带有短码的链接时,我们从数据库中查找对应的原始链接并进行重定向。

总结

以上就是使用 Node.js 和 Express 搭建一个简单但高效的短网址系统的完整流程。你可以根据需要扩展功能,比如添加过期时间、统计点击次数等。希望这能帮助你开始构建自己的短网址系统!


打不开

不会吧,github怎能打不开呢

找了个程序,有人感兴趣么,求合作 效果见:http://qr.cc/

是说实施更新最新热点的意思吗

要实现一个高效的短网址系统,可以分为以下几个步骤:

  1. 生成唯一短码:确保每次生成的短码都是唯一的。
  2. 存储映射关系:将原始长网址与生成的短码建立映射关系。
  3. 重定向服务:根据访问的短码进行查询并重定向到对应的长网址。

示例代码

1. 安装依赖

首先安装必要的库,如expressmongoose等:

npm install express mongoose

2. 创建短网址模型

创建一个Mongoose模型来存储长网址和短码之间的映射关系:

const mongoose = require('mongoose');
const urlSchema = new mongoose.Schema({
    originalUrl: { type: String, required: true },
    shortCode: { type: String, required: true, unique: true }
});
module.exports = mongoose.model('ShortUrl', urlSchema);

3. 创建API路由

创建Express应用,并定义几个API路由来处理创建短网址和重定向请求:

const express = require('express');
const ShortUrl = require('./models/urlModel');

const app = express();
app.use(express.json());

// 生成短码
function generateShortCode() {
    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    let result = '';
    for (let i = 0; i < 6; i++) {
        result += characters.charAt(Math.floor(Math.random() * characters.length));
    }
    return result;
}

// 创建短网址
app.post('/shorten', async (req, res) => {
    const { originalUrl } = req.body;

    // 检查是否已存在相同的长网址
    let shortUrl = await ShortUrl.findOne({ originalUrl });

    if (!shortUrl) {
        do {
            shortUrl = await ShortUrl.findOne({ shortCode: generateShortCode() });
        } while (shortUrl);

        shortUrl = new ShortUrl({ originalUrl, shortCode: generateShortCode() });
        await shortUrl.save();
    }

    res.send({ shortUrl: `http://yourdomain.com/${shortUrl.shortCode}` });
});

// 重定向
app.get('/:shortCode', async (req, res) => {
    const shortCode = req.params.shortCode;
    const shortUrl = await ShortUrl.findOne({ shortCode });

    if (shortUrl) {
        res.redirect(302, shortUrl.originalUrl);
    } else {
        res.status(404).send('Short URL not found');
    }
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

运行项目

确保MongoDB已经启动并运行,然后运行你的Node.js应用程序:

node app.js

这样,你就可以通过POST请求向/shorten发送长网址,并通过GET请求访问/shortCode来重定向到原始网址。

回到顶部