从typescript中的blob获取值

u0sqgete  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(531)

编写一个angular5/typescript客户机,调用node.js web服务器与mysql数据库对话。成功地进行了人名征集:

SELECT *
FROM stories JOIN users
ON stories.author_id=users.id
WHERE stories.story_id = 1;

如果我需要在数据库的字段级别加密作者的姓氏,我可以使用aes\u encrypt和aes\u decrypt。这将更改对此的调用。我在这里使用dlname来区分解密值和lname字段。

SELECT *, AES_DECRYPT(lname, UNHEX(SHA2('some phrase',512))) AS dlname
FROM stories JOIN users
ON stories.author_id=users.id
WHERE stories.story_id = 1;

这在使用phpmyadmin的dev环境中工作,dlname在返回时显示为文本。但是当用mysql推送到prod env并调用它时,typescript(angular5客户机)将dlname显示为blob[object]。我用mysql workbench检查了它,它也显示为一个blob,我可以右键单击它,然后单击“openvalue in viewer”,我就可以看到它的姓了。
我的问题是,如何编写typescript代码来从blob中获取实际的lname值?相关的代码行是。。。

this.http.get<StoryRes>(sRootURI + '/getStory/' + sDocID)
    .subscribe(data => {
      this.sAuthor = data[0].fname + ' ' + data[0].dlname;

在本例中,dlname在控制台中显示为[object]。

gev0vcfq

gev0vcfq1#

我从mysql中使用aes\ U decrypt with order子句返回的blob数据中找到了一些帮助。添加强制转换(。。。作为char)围绕aes\u解密函数。。。

SELECT *, CAST(AES_DECRYPT(lname, UNHEX(SHA2('some phrase',512))) AS CHAR) as dlname...

在客户端,只需确保调用新的字段名dlname而不是实际的名称lname。客户端不需要任何附加内容,将按预期以文本形式提供。

相关问题