Home Web Front-end Front-end Q&A Nodejs implements short links

Nodejs implements short links

May 28, 2023 pm 12:47 PM

With the development of the Internet, short links have become a very popular form of links. Short links can not only shorten the link length, but also beautify the link and increase user click-through rate. This article will introduce how to implement short links with Node.js.

  1. What is a short link

A short link is actually a string of characters, corresponding to a long link. The advantage of short links is that they can reduce link length, beautify links and increase user click-through rates.

Usually, short link services are provided by a third party, which generates a short link based on the user's long link and then redirects to the original long link address. There are many such services, such as Bitly, TinyURL, etc.

  1. Why use Node.js to implement short links

Node.js is an open source, cross-platform JavaScript running environment that allows JavaScript to run on the server side. Compared with other server-side languages, the biggest advantage of Node.js is its high concurrency and lightweight, which can quickly respond to user requests and handle very large concurrent requests.

Another major advantage of Node.js is the NPM package manager, which has a large number of lightweight modules available, which greatly reduces development complexity and improves development efficiency.

Therefore, using Node.js to implement short links can not only respond to requests quickly, but also easily use the NPM package manager to manage dependencies.

  1. Implementation steps

This article will implement the short link according to the following steps:

  1. Generate short code
  2. Storage short link Mapping relationship between code and long link
  3. Parse short link and redirect

3.1 Generate short code

The core of generating short code is to use a unique long link Takes an integer value as input and converts it into a string. Obviously, the input long integer needs to be large enough, otherwise the number of short codes will be very limited.

In the specific implementation, you can use alphabet and numbers to encode, and convert the long integer value into an arbitrary string, such as 32-base or 62-base.

The following is a sample code to generate a short code:

const alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const base = alphabet.length;
function encode(num) {
  let encoded = '';
  while (num) {
    const remainder = num % base;
    num = Math.floor(num / base);
    encoded = alphabet[remainder].toString() + encoded;
  }
  return encoded;
}
Copy after login

The above code generates a function that can represent a 62-digit string. For an input integer value, this function converts it into a 62-digit string through continuous remainder method, and finally returns the generated string.

3.2 Store the mapping relationship between short code and long link

In the above, we have realized the generation of short code, and the next step is to store the mapping relationship between short code and long link. Here we choose to use Redis as the storage database.

Redis is an efficient key-value storage database written in C language. It can quickly read and write data. It also supports cluster construction and is very suitable for use as data storage for high-concurrency applications.

The following is a sample code for using Redis to store mapping relationships in Node.js:

const redis = require('redis');
const client = redis.createClient({ host: 'localhost', port: 6379 });

function saveUrl(url, callback) {
  client.incr('short:id', function(err, id) {
    if (err || !id) {
      return callback(err);
    }
    const shortUrl = encode(id);
    client.set(`short:${shortUrl}`, url, (err) => {
      if (err) {
        return callback(err);
      }
      callback(null, shortUrl);
    });
  });
}
Copy after login

In the above code, we first use the incr command to obtain a unique value from Redis Auto-incremented id. Then, encode that id into a shortcode and use the set command to store the shortcode and long link mapping to Redis.

3.3 Parse short links and redirect

Finally, we implement a route that handles requests to parse short links and redirect users to the long link address.

The following is a sample code to implement the redirection function in Node.js:

const http = require('http');
const url = require('url');

http.createServer(function (req, res) {
  const shortUrl = url.parse(req.url).pathname.slice(1);
  client.get(`short:${shortUrl}`, function (err, url) {
    if (err) {
      return console.error(err);
    }
    if (!url) {
      res.writeHead(404);
      return res.end('404 Not Found');
    }
    res.writeHead(301, { Location: url });
    res.end();
  });
}).listen(8080, () => console.log('Listening on port 8080...'));
Copy after login

Through the above code, we use http.createServer to create an HttpServer instance, and The url module is used in the callback function to resolve the requested connection.

Then, we obtain the original link corresponding to the short link from Redis, and use res.writeHead to redirect to the original link address.

Of course, we must also consider the validity exception of the short link. For example, if the short link is not found in the database, a 404 error should be returned.

  1. Summary

This article focuses on how to use Node.js to implement short links, starting from generating short links, storing the mapping relationship between short codes and long links, and parsing short links. The three aspects of redirection elaborate on its implementation steps.

Here we use Redis to implement data storage, implement redirection through simple routing and http interaction, and use nodejs to work with Redis to create an efficient and pleasant development experience, allowing us to quickly Implement short link service.

The above is the detailed content of Nodejs implements short links. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1658
14
PHP Tutorial
1257
29
C# Tutorial
1231
24
React's Role in HTML: Enhancing User Experience React's Role in HTML: Enhancing User Experience Apr 09, 2025 am 12:11 AM

React combines JSX and HTML to improve user experience. 1) JSX embeds HTML to make development more intuitive. 2) The virtual DOM mechanism optimizes performance and reduces DOM operations. 3) Component-based management UI to improve maintainability. 4) State management and event processing enhance interactivity.

React and the Frontend: Building Interactive Experiences React and the Frontend: Building Interactive Experiences Apr 11, 2025 am 12:02 AM

React is the preferred tool for building interactive front-end experiences. 1) React simplifies UI development through componentization and virtual DOM. 2) Components are divided into function components and class components. Function components are simpler and class components provide more life cycle methods. 3) The working principle of React relies on virtual DOM and reconciliation algorithm to improve performance. 4) State management uses useState or this.state, and life cycle methods such as componentDidMount are used for specific logic. 5) Basic usage includes creating components and managing state, and advanced usage involves custom hooks and performance optimization. 6) Common errors include improper status updates and performance issues, debugging skills include using ReactDevTools and Excellent

React Components: Creating Reusable Elements in HTML React Components: Creating Reusable Elements in HTML Apr 08, 2025 pm 05:53 PM

React components can be defined by functions or classes, encapsulating UI logic and accepting input data through props. 1) Define components: Use functions or classes to return React elements. 2) Rendering component: React calls render method or executes function component. 3) Multiplexing components: pass data through props to build a complex UI. The lifecycle approach of components allows logic to be executed at different stages, improving development efficiency and code maintainability.

Frontend Development with React: Advantages and Techniques Frontend Development with React: Advantages and Techniques Apr 17, 2025 am 12:25 AM

The advantages of React are its flexibility and efficiency, which are reflected in: 1) Component-based design improves code reusability; 2) Virtual DOM technology optimizes performance, especially when handling large amounts of data updates; 3) The rich ecosystem provides a large number of third-party libraries and tools. By understanding how React works and uses examples, you can master its core concepts and best practices to build an efficient, maintainable user interface.

React's Ecosystem: Libraries, Tools, and Best Practices React's Ecosystem: Libraries, Tools, and Best Practices Apr 18, 2025 am 12:23 AM

The React ecosystem includes state management libraries (such as Redux), routing libraries (such as ReactRouter), UI component libraries (such as Material-UI), testing tools (such as Jest), and building tools (such as Webpack). These tools work together to help developers develop and maintain applications efficiently, improve code quality and development efficiency.

React: The Power of a JavaScript Library for Web Development React: The Power of a JavaScript Library for Web Development Apr 18, 2025 am 12:25 AM

React is a JavaScript library developed by Meta for building user interfaces, with its core being component development and virtual DOM technology. 1. Component and state management: React manages state through components (functions or classes) and Hooks (such as useState), improving code reusability and maintenance. 2. Virtual DOM and performance optimization: Through virtual DOM, React efficiently updates the real DOM to improve performance. 3. Life cycle and Hooks: Hooks (such as useEffect) allow function components to manage life cycles and perform side-effect operations. 4. Usage example: From basic HelloWorld components to advanced global state management (useContext and

React vs. Backend Frameworks: A Comparison React vs. Backend Frameworks: A Comparison Apr 13, 2025 am 12:06 AM

React is a front-end framework for building user interfaces; a back-end framework is used to build server-side applications. React provides componentized and efficient UI updates, and the backend framework provides a complete backend service solution. When choosing a technology stack, project requirements, team skills, and scalability should be considered.

The Future of React: Trends and Innovations in Web Development The Future of React: Trends and Innovations in Web Development Apr 19, 2025 am 12:22 AM

React's future will focus on the ultimate in component development, performance optimization and deep integration with other technology stacks. 1) React will further simplify the creation and management of components and promote the ultimate in component development. 2) Performance optimization will become the focus, especially in large applications. 3) React will be deeply integrated with technologies such as GraphQL and TypeScript to improve the development experience.

See all articles