Решение Node.js и MongoDB
Поскольку нам известен формат, который MongoDB использует для создания нового ObjectId с 12 байтами.
- 4-байтовое значение, представляющее секунды с начала эпохи Unix,
- 3-байтовый идентификатор машины,
- 2-байтовый идентификатор процесса
- 3-байтовый счетчик (на вашем компьютере), начиная со случайного значения.
Пример (я выбираю случайную последовательность)
a1b2c3d4e5f6g7h8i9j1k2l3
- a1b2c3d4 представляет секунды с начала эпохи Unix,
- 4e5f6g7 представляет идентификатор машины,
- h8i9 представляет идентификатор процесса
- j1k2l3 представляет счетчик, начиная со случайного значения.
Поскольку счетчик будет уникальным, если мы храним данные на одной машине, мы можем получить их без сомнений, что они будут повторяться.
Таким образом, короткий URL будет счетчиком , и здесь приведен фрагмент кода, предполагающий, что ваш сервер работает нормально.
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create a schema
const shortUrl = new Schema({
long_url: { type: String, required: true },
short_url: { type: String, required: true, unique: true },
});
const ShortUrl = mongoose.model('ShortUrl', shortUrl);
// The user can request to get a short URL by providing a long URL using a form
app.post('/shorten', function(req ,res){
// Create a new shortUrl */
// The submit form has an input with longURL as its name attribute.
const longUrl = req.body["longURL"];
const newUrl = ShortUrl({
long_url : longUrl,
short_url : "",
});
const shortUrl = newUrl._id.toString().slice(-6);
newUrl.short_url = shortUrl;
console.log(newUrl);
newUrl.save(function(err){
console.log("the new URL is added");
})
});