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}`);
});
解释
- 生成短链接:我们使用
short-uuid
库生成唯一的短码。 - 创建新链接:当用户提交原始链接时,我们将其保存到 MongoDB,并返回生成的短链接。
- 处理重定向:当用户访问带有短码的链接时,我们从数据库中查找对应的原始链接并进行重定向。
总结
以上就是使用 Node.js 和 Express 搭建一个简单但高效的短网址系统的完整流程。你可以根据需要扩展功能,比如添加过期时间、统计点击次数等。希望这能帮助你开始构建自己的短网址系统!
打不开
不会吧,github怎能打不开呢
找了个程序,有人感兴趣么,求合作 效果见:http://qr.cc/
是说实施更新最新热点的意思吗
要实现一个高效的短网址系统,可以分为以下几个步骤:
- 生成唯一短码:确保每次生成的短码都是唯一的。
- 存储映射关系:将原始长网址与生成的短码建立映射关系。
- 重定向服务:根据访问的短码进行查询并重定向到对应的长网址。
示例代码
1. 安装依赖
首先安装必要的库,如express
、mongoose
等:
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
来重定向到原始网址。