首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

如何快速搭建一个短链接服务?

摘要: 很简单的短链接教程。 原文:十分钟实现短链接服务(Node + Express + MongoDB) 作者:MudOnTire Fundebug经授权转载,版权归原作者所有。 短链接我们或多或少都使用过,所谓短链接就是根据较长的原链接url生成一段较短的链接,访问短链接可以跳转到对应的原链接,这样做好处在于:1. url更加美观;2. 便于保存和传播;3. 某些网站内容发布有字数限制,短链接可以节约字数。 短链接实现的原理非常简单,可以概括为: 为每个原链接生成不重复的唯一短链接 将原链接和对应短链接成对保存到数据库 访问短链接时,web服务器将目标重定向到对应的原链接 根据以上思路,我们自己也可以分分钟实现一个短链接生成服务。本文示例使用 node + express + mongodb。 1. 初始化项目 (1). 安装如下依赖: package.json: "dependencies": { "config": "^3.2.2", // 读取项目配置 "express": "^4.17.1", // web服务器 "mongoose": "^5.6.9", // 操作mongodb "shortid": "^2.2.14", // 生成不重复的唯一Id "valid-url": "^1.0.9" // 判断url格式是否正确 } (2). 增加项目配置: 主要用于存放MongoDB的连接字符串和短链接的base url。 config/default.json: { "mongoURI": "mongodb://localhost:27017/url-shorten-service", "baseUrl": "http://localhost:5000" } (3). 增加MongoDB连接方法 config/db.js: const mongoose = require('mongoose'); const config = require('config'); const db = config.get('mongoURI'); const connectDB = async () => { try { await mongoose.connect(db, { useNewUrlParser: true }); console.log(`MongoDB Connected to: ${db}`); } catch (error) { console.error(error.message); process.exit(1); } } module.exports = connectDB; (4). 启动express: index.js: const express = require('express'); const connectDB = require('./config/db'); const app = express(); // 连接MongoDB connectDB(); app.use(express.json({ extended: false })); // 路由,稍后设置 app.use('/', require('./routes/index')); app.use('/api/url', require('./routes/url')); const port = 5000; app.listen(port, () => { console.log(`Server running on port ${port}`); }); 2. 定义数据库模型 我们需要将原链接和对应短链接保存到数据库,简单起见,我们只需要保存一个短链接编码,相应的短链接可以使用base url和编码拼接而成。 models/url.js: const mongoose = require('mongoose'); const urlSchema = new mongoose.Schema({ urlCode: String, longUrl: String }); module.exports = mongoose.model('Url', urlSchema); 3. 生成短链接编码 这是我们实现的关键一步,思路是:用户传入一个长链接,我们首先使用 valid-url 判断传入的url是否合法,不合法则返回错误,如果合法我们在数据库中搜索是否有该长链接的记录,如果有则直接返回该条记录,如果没有则生成一条新记录,并生成对应的短链接。借助于 shortId,我们可以很方便的生成一个不重复的唯一编码。 routes/url.js: const epxress = require("express"); const router = epxress.Router(); const validUrl = require('valid-url'); const shortId = require('shortid'); const config = require('config'); const Url = require('../models/url'); router.post('/shorten', async (req, res, next) => { const { longUrl } = req.body; if (validUrl.isUri(longUrl)) { try { let url = await Url.findOne({ longUrl }); if (url) { res.json({ shortUrl: `${config.get('baseUrl')}/${url.urlCode}` }); } else { const urlCode = shortId.generate(); url = new Url({ longUrl, urlCode }); await url.save(); res.json({ shortUrl: `${config.get('baseUrl')}/${urlCode}` }); } } catch (error) { res.status(500).json('Server error'); } } else { res.status(401).json('Invalid long url'); } }); module.exports = router; 4. 访问短链接跳转到原链接 最后一步非常简单,当用户访问我们生成的短链接时,我们根据url中的短链接编码查询到对应记录,如果存在对应记录我们使用express的res.redirect方法将访问重定向至原链接,如果不存在则返回错误。 routes/index.js const epxress = require("express"); const router = epxress.Router(); const Url = require('../models/url'); router.get('/:code', async (req, res, next) => { try { const urlCode = req.params.code; const url = await Url.findOne({ urlCode }); if (url) { // 重定向至原链接 res.redirect(url.longUrl); } else { res.status(404).json("No url found"); } } catch (error) { res.status(500).json("Server error"); } }); module.exports = router; 测试一下: 访问短链接: 这样,一个简单的短链接生成服务就完成了,往往在我们看来很神奇的技术其实背后的原理和实现很简单,希望本文对大家有所启发。 最后,推荐大家使用Fundebug,一款很好用的BUG监控工具~ 本文Demo地址:https://github.com/MudOnTire/url-shortener-service 关于Fundebug Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了20亿+错误事件,付费客户有阳光保险、核桃编程、荔枝FM、掌门1对1、微脉、青团社等众多品牌企业。欢迎大家免费试用!

优秀的个人博客,低调大师

开源区块链-链(NULS ChainBox)搭建和测试

简介:NULS ChainBox是一个基于NULS2.0区块链底层运行环境构建的一套区块链应用快速开发平台。它可以帮助区块链应用开发者快速构建自己的区块链应用,而无需关心复杂的底层逻辑。它包含一套友好的开发流程,开发工具以及若干的模块开发模板。 NULS2.0底层运行环境基于微服务架构,支持多语言模块接入,开发者还可使用ChainBox提供的各种开发模板无需关心如何与NULS2.0模块通信,只需专注于业务的实现。github地址:https://github.com/lijunzhou/nuls-engine1.环境准备:macOS、centos7+、ubuntu 14+或者其他linux内核的操作系统,服务器最低标准4核8G安装 Git (推荐yum安装)安装命令 yum -y install git git --version 安装

优秀的个人博客,低调大师

Ubuntu 安装php环境 lamp 搭建网站

1.Apache安装 首先安装apache服务器,ubuntu下面使用apt-get来下载安装软件。 sudo apt-get install apache2 输入密码后,便开始下载安装了,安装好后打开浏览器,输入localhost查看是否安装成功 如果如上显示的话,说明安装成功了。 2.PHP安装 这里我准备安装PHP7.0版本的,在命令行输入: sudo apt-get install php7.0 安装完成后输入:php -v查看PHP是否安装成功 php -v PHP和Apache都安装好后就需要让Apache能够识别解析PHP文件,我们先搜一下有没有适合PHP7的插件,输入命令: apt-cache search libapache2-mod-php 可以看到搜出来的结果里面有一个是PHP7.0版本的,我们就安装这个: sudo apt-get install libapache2-mod-php7.0 下面我们就可以随便写一个php文件看是否可以解析访问。输入命令: cd /var/www/html 切换到apache项目目录下,新建文件: sudo vim test.php 内容: <?php phpinfo(); ?> 保存后浏览器访问:localhost/test.php 如果一切正常的话,就会看到php的一些信息。 3.Mysql安装 接下来就是安装数据库Mysql了,数据库需要装服务端和客户端两个,输入命令: sudo apt-get install mysql-server mysql-client 安装过程中会提示设置root账号的登录密码,输入后选择OK继续安装 安装完成后,输入mysql -V查看安装的版本信息 mysql -V 同样的,我们还需要让mysql能够和php互动,安装php的mysql插件: sudo apt-get install php7.0-mysql 最后我们还可以安装一些常用的php扩展 sudo apt-get install php7.0-gd php7.0-mbstring php7.0-xml 到此关于lamp的软件就安装完成了,最后还可以安装一下composer: sudo apt-get install composer 安装好后输入命令:composer查看是否成功 composer 如图显示,安装过程就全部完成了。 php 环境相关问题: 准备通过phpinfo()获取php的所有配置文件路径test.php 内容 <?php phpinfo(); ?> 1.curl 未开启,请先开启mbstring扩展 解决方法: 安装插件 sudo apt-get install curl libcurl4 libcurl3-dev php7.2-curl 开启权限 sudo sudo vim /etc/php/7.2/apache2/php.ini php.ini当中的 ;extension=php_curl.dll (去掉注释) 改成 extension=php_curl.dll 重启服务 sudo /etc/init.d/apache2 restart 2.mbstring 未开启,请先开启mbstring扩展 解决方法: 安装插件 sudo apt-get install php7.2-mbstring 开启权限 sudo sudo vim /etc/php/7.2/apache2/php.ini ;extension=php_mbstring.dll 改为 extension=php_mbstring.dll 去掉分号的注释作用 重启服务 sudo /etc/init.d/apache2 restart 3.cache 无效,请先设置目录读写权限,请联系您的空间或者服务器提供商 Linux php根目录下: cd /var/www/html/ mkdir cache chmod 777 cache chmod 777 index.php

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册