问题标签 [hashids]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 在模型访问器中对 id 进行散列时如何获取两个表之间的关系?
两个表之间的关系正常工作,但是当我使用Hashids
它时它不会,它返回 null。
我的代码:
汽车模型:
汽车图像模型:
预留车型:
我的控制器:
$cars = Car::with('images')->get();
$cars
有价值,但里面的图像,没有!
请注意,它使用的是普通 id,但是当我对它们的 id 进行哈希处理时,它不会返回任何值!
javascript - vue.js 中的库哈希导入不起作用
我似乎无法让库hashid与 vue.js 一起使用
我想如何使用它的首选方法是:
node.js - AdonisJs:使用哈希值
已经有人在 AdonisJs 中使用过 Hashids 了吗?
更具体地说,在模型中,返回对象中的属性hashid
我正在从 Laravel 迁移到 Adonis。在 Laravel 中,每个模型中只需要几行代码就可以了,如下所示:
我安装了这个 NPM 包:https://www.npmjs.com/package/adonis-hashids,我试图弄清楚如何像 Laravel 那样使用
symfony - Symfony VichUploaderBundle 在控制器中的 DownloadHandler 上自动装配
我正在使用带有 VichUploaderBundle 1.9 的 Symfony 4,我很难DownloadHandler
在控制器中注入服务以便将文件发送到客户端。
我还使用HashidsBundle将我的实体 ID 转换为jFaJ
我的 URL 中的类似内容。
如VichUploaderBundle 文档中所述,我将服务注入到我的控制器中,如下所示:
这是我遇到的错误:
传递给 App\Controller\WallpapersController::download() 的参数 2 必须是 Vich\UploaderBundle\Handler\DownloadHandler 的实例,给定整数,在 /mnt/c/Users/user/Documents/Dev/symfony/vendor/symfony 中调用/http-kernel/HttpKernel.php 在第 151 行
我还尝试通过在控制器中添加以下行来手动调用服务:
$this->get('vich_uploader.download_handler');
但它仍然无法正常工作,我现在有这个错误:
找不到服务“vich_uploader.download_handler”:即使它存在于应用程序的容器中,“App\Controller\WallpapersController”内的容器是一个较小的服务定位器,只知道“学说”、“form.factory”、“http_kernel” ”、“parameter_bag”、“request_stack”、“router”、“security.authorization_checker”、“security.csrf.token_manager”、“security.token_storage”、“serializer”、“session”和“twig”服务。尝试改用依赖注入。
reactjs - react-key-index 示例示例不起作用
javascript - Javascript。未捕获的 TypeError:Hashids 不是构造函数
在https://www.npmjs.com/package/hashids运行教程中的代码
得到错误:Uncaught TypeError: Hashids is not a constructor.
我在没有模块的 vanilla js 应用程序中运行它。只是 html 和 js 文件。如果我使用reqire(hasids)
它会弹出错误:require is not defined
. 我需要在使用常规浏览器 javascript 编码的应用程序上运行它。请帮我运行这个。谢谢!
c# - 如何处理同一 c# 类的编码和解码版本
设想
我正在更新我的 .NET API 以对所有数据库键字段进行编码,这样顺序键就不会暴露给最终用户。我为此使用hashids.org并构建了辅助方法来快速解码/编码我的自动映射器映射中的属性。但是,API 有多个版本,只有最新版本应该使用此功能进行更新,这意味着我不能简单地覆盖现有的类。我已经实现了一些可行的解决方案,但它们都有我希望清除的不良代码气味。
解决方案
我目前正在控制器层执行编码。我也可以在数据访问层看到这样做的好处,但我觉得在该层存在更多泄漏/错过转换的风险,特别是因为 API 有许多不同的数据源。另外,隐藏密钥是外部世界的一个问题,控制器是看门人,所以在那里感觉很合适。
应用程序目前有以下模型模式,无法更改:Model(DB 中存在的模型)> ValueObject(服务模型,VO)> DTO(API 模型)。
(1) 初步尝试
下面是一个需要支持编码和解码状态的类的示例,其中Utils.Encode()
和Utils.Decode()
是辅助方法,它们将使用 Hashids 在 int 和 string 之间转换字段。
- 我选择制作现有
EquipmentDTO
的编码版本,因为我希望它成为新标准,这最终会导致EquipmentUnencodedDTO
旧控制器最终得到更新而被弃用和删除。 - 我选择不复制
CreateMap<EquipmentVO, EquipmentDTO>
(CreateMap<EquipmentVO, EquipmentUnencodedDTO>
反之亦然),因为它会导致 AutoMapper 文件中出现大量重复,这已经很大(尽管这可能不是真正的问题?) - 我不喜欢这个解决方案,因为在我的旧控制器中,映射现在很混乱。例如,在 POST 中,未编码的输入 DTO 必须通过以下方式转换为服务模型:
Mapper.Map<EquipmentVO>(Mapper.Map<EquipmentDTO>(unencodedEquipmentInput))
这非常难看。- 话虽如此,这应该是一个暂时的问题,那么这是一个真正的问题吗?
- 如果我创建了这个问题就会消失
CreateMap<EquipmentVO, EquipmentUnencodedDTO>
- 我不喜欢这个解决方案,因为我的类有很多重复的字段在编码和解码版本之间没有变化
(2) 第二次尝试
上面的两个要点使我对此进行了重构:
- 我喜欢现在在编码和解码状态之间切换是多么简单,将我上面的双重映射减少到:
Mapper.Map<EquipmentVO>(unencodedEquipmentInput.Encode());
- 我喜欢嵌套类,因为它编码了两个类之间的关系,并且在识别哪些字段被编码/解码方面做得更好
- 我觉得这闻起来更糟
(3) 下一次尝试
我的下一个尝试是将已解码类的缺失映射添加到服务模型中,并撤消尝试 #2 中的更改。这创建了大量重复的映射代码,我仍然被两个类中的重复属性所困扰,没有明确指示哪些字段被解码/编码,而且感觉比必要的要麻烦得多。
感谢您的任何建议!
database - 在数据库中将 ID 存储为 int 并使用 Dapper 将它们作为 HashID 获取
我在 MS SQL Server 中将主键 ID 存储为 int。我想将它们转换为 HashID 并将它们作为字符串存储在我的实体对象中。另外,我想在将我的对象存储在数据库中时将它们转换回来。有没有办法在 Dapper 中做到这一点?如果没有,有什么建议或解决方法吗?
请注意,我说的是仅针对特定实体类型的特定属性的自定义类型处理程序,而不是通用自定义类型处理程序。谢谢你。
node.js - 在打字稿中导入哈希时出现异常
我正在尝试hashids
在 Typescript 中导入:
你可以从这里克隆代码
========== index.ts ==========
但我得到下一个错误:
=========== 控制台 =========
这是我的tsconfig.json
我也在使用nodemon
这个配置:
这里会发生什么?
php - 修改 Laravel 模型响应以使用不同的 ID
我正在寻找某种“拦截”并在模型中的字段发送回客户端之前对其进行更改。我有一个 API,其端点类似于以下内容:
我的应用程序使用vinkla/laravel-hashids,因此就客户端应用程序而言,要查询的 ID 应该类似于K6LJwKJ1M8
,而不是1
。目前,我可以查询提供哈希 ID 的用户,但响应返回的是数字/自动递增 ID。
例如,对于诸如/api/users/K6LJwKJ1M8
我收到以下响应的查询:
Laravel 中是否有一种很好的方法可以修改所有在响应中返回的用户对象以使用 vinkla/laravel-hashids ID,而不是自动递增 ID?
理想情况下,上述响应将变为:
我在想类似 using 的东西getRouteKey
会起作用,但它不会改变在 JSON 响应中发送的对象。
例如
如果有一个地方可以更改它会很好,因为我的应用程序有大约 40 条不同的路由,否则我需要“手动”更改(例如,在发送响应之前执行类似的操作$user->id = Hashids::encode($id)
)