我正在制作一个URL缩短器,需要判断生成的短URL是否在数据库中不存在,以避免数据损坏.

我正在mongodb和mongoose中使用node和express.这是我提出的算法,但我真的不喜欢它.我有没有办法用更干净的方式来做这件事?

while(true){
            var shortURLString = utils.makeShortURLString();
            var dbQuery = URL.findOne({shortURL: shortURLString});
            if(typeof dbQuery.fullURL == 'undefined'){
                const URL_obj = new URL({fullURL: req.body.inputURL, shortURL: shortURLString});
                await URL_obj.save();
                const shortURL = req.get('host')+"/"+URL_obj.shortURL
                const fullURL = URL_obj.fullURL;
                res.render('shortenedURL', {shortURL: shortURL, fullURL: fullURL});
                break;
            }
        }

欢迎任何其他批评/意见!

推荐答案

我认为我可以稍微优化一下的唯一方法是:

let shortURLstr

do shortURLstr = utils.makeShortURLString()
while (URL.findOne({ shortURL: shortURLstr }))

const { shortURL, fullURL } = (new URL({fullURL: req.body.inputURL, shortURL: shortURLstr})).save()

res.render('shortenedURL', { shortURL: req.get('host') + "/" + shortURL, fullURL })

Node.js相关问答推荐

postgresql层与应用层的序列化

express返回意外的URL

Sequelize-测试使用虚拟场更新模型

如何使用聚合管道交换键值对

JEST模拟由http服务器控制器导入的ES模块

获取页面大小为10的所有文章,每篇文章填充一些所需的用户信息

Prisma 和 Nextjs:重新部署之前内容不会更新

在父模式中设置默认值.

$not 的聚合版本是什么?

使用react 组件加载特定 DIV 而无需重新加载整个页面

使用mongoose 创建新文档并仅取回选定的字段

Mongoose,如何一次更新多个?

在 Javascript 逻辑中访问 EJS 变量

如何使用 superagent/supertest 链接 http 调用?

这到底是什么';拒绝未经授权';对我来说是什么意思?

如何将使用 Gulp 的 node 部署到 heroku

有人在 NodeJS 中实现过 wiki 吗?

Express.js:没有这样的文件或目录

node.js 中存储的模块变量在什么范围内?

卸载代码/模块