V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  rikka  ›  全部回复第 2 页 / 共 12 页
回复总数  228
1  2  3  4  5  6  7  8  9  10 ... 12  
2020-11-25 14:21:59 +08:00
回复了 rikka 创建的主题 Node.js nestjs 如何优雅地给 response 设置 header?
@hongweiliuruige #19 这跟我 10L 说的差不多
2020-11-25 14:20:27 +08:00
回复了 rikka 创建的主题 Node.js nestjs 如何优雅地给 response 设置 header?
@BoringTu #20 你说的这个理我也认同

但你考虑下这种情况:客户端做其他业务请求时,服务端发现 token 快过期了,要发个新的给客户端,新 token 放哪里?放 header 最恰当吧

客户端怎么处理这种情况,当然是全局拦截器一发现 header 有 token 就保持起来,然后如果登录请求 token 放 body,那么客户端代码将有 2 处处理 token 的代码逻辑,如果登录 token 放 header,那么将简化为只有一处代码,不管是登录还是其他请求,只要 header 有 token 就保持起来,是不是更简明一点
2020-11-20 22:25:24 +08:00
回复了 rikka 创建的主题 Node.js nestjs 如何优雅地给 response 设置 header?
@Kasumi20 #16 我所有的控制器方法都是直接 return 数据,唯独这里不能 return,代码看起来我那个难受啊。。。
2020-11-16 14:11:48 +08:00
回复了 rikka 创建的主题 Node.js nestjs 如何优雅地给 response 设置 header?
@zy445566 #11 我说的副作用是指:只要用了 nestjs 提供的 @Res 装饰器后就不能直接 return 数据了,必须操作 res.json/send 去返回数据,然后这又导致拦截器不能正常工作

你说副作用具体是什么,还是说是指函数式编程中的那种副作用啊
2020-11-15 23:43:33 +08:00
回复了 rikka 创建的主题 Node.js nestjs 如何优雅地给 response 设置 header?
@luob #6 卧槽,还在想怎么实现这个 @CurrentUser,然后就受到启发,我可以自己写个装饰器自己拿到 response 啊

```
export const resp = createParamDecorator((data, ctx: ExecutionContext) => {
return ctx.switchToHttp().getResponse()
})

@Post('login')
async login (@Body() param,@resp() resp:any) {
const data={}
resp.set('token','')
return {data}
}
```

非常非常完美!!!
2020-11-15 23:13:46 +08:00
回复了 rikka 创建的主题 Node.js nestjs 如何优雅地给 response 设置 header?
业务交互数据放 body
鉴权这种相对特殊的数据放 header

难道不是更常见?
2020-11-15 23:05:35 +08:00
回复了 rikka 创建的主题 Node.js nestjs 如何优雅地给 response 设置 header?
@luob #6 还有个好处忘了讲,比方 token 还剩 10 分种就过期了,客户端做其他业务请求的时候我想重新下发一个新 token 给他啊,放 header 里面就就非常合适
2020-11-15 23:02:35 +08:00
回复了 rikka 创建的主题 Node.js nestjs 如何优雅地给 response 设置 header?
@luob #6

我也没啥特别的啊
仅仅仅就想 token 放 header 里面给客户端拿而已
为什么呢?因为客户端请求的时候会把 token 放在 header,所以为了对称美(狗头),下发 token 也想放 header 里面
2020-11-15 22:32:30 +08:00
回复了 rikka 创建的主题 Node.js nestjs 如何优雅地给 response 设置 header?
@luob #4 怎么会没意义呢,我鉴权用 jwt 来做,就想 token 放在 response header 中给客户端去拿,极其常见的情况

另外你第一段代码试过了吗,你一旦用 @Res 这个装饰器后面 return 就没用了
2020-11-15 19:37:31 +08:00
回复了 rikka 创建的主题 Node.js nestjs 如何优雅地给 response 设置 header?
@zengming00 #1 我在这里被众人安利 nestjs 😂
遇到同样的问题,搜到这帖,然后自己看了看源码,解决如下

加个装饰器函数
//set-module-prefix.decorator.ts

```ts
import { PATH_METADATA, MODULE_METADATA } from '@nestjs/common/constants'

const { IMPORTS, CONTROLLERS } = MODULE_METADATA

function resolveController (target, controllers = []) {
controllers.push(...(Reflect.getMetadata(CONTROLLERS, target) ?? []))
const imports = Reflect.getMetadata(IMPORTS, target)
if (imports) {
imports.forEach(module => {
resolveController(module, controllers)
})
}
return controllers
}

export function setModulePrefix (prefix:string) {
return target => {
resolveController(target).forEach(controller => {
const path = Reflect.getMetadata(PATH_METADATA, controller)
if (path) {
Reflect.defineMetadata(PATH_METADATA, prefix + '/' + path, controller)
}
})
}
}
````

使用,这样就自动给 AdminModule 下的所有控制器加上`admin`这个前缀了
```ts
import { Module } from '@nestjs/common'
import { AdminController } from './controllers/admin.controller'
import { setModulePrefix } from '../decorators/set-module-prefix.decorator'

@setModulePrefix('admin')
@Module({
imports: [
],
controllers: [
AdminController,
],
providers: [
],
})
export class AdminModule {}

```
2020-10-16 22:28:03 +08:00
回复了 rikka 创建的主题 问与答 如何在完全不写硬盘的情况下播放一个远程视频?
@linxiaojialin #33 其实不是啊,缓存、解码我大概都知道,我关注点在于:比方我有总计 100G 视频,那我播放完这些视频不就得往硬盘里写入 100G 缓存数据,这很“伤硬盘”,我想解决这个问题
2020-10-16 19:33:28 +08:00
回复了 rikka 创建的主题 问与答 如何在完全不写硬盘的情况下播放一个远程视频?
@yeqizhang #26 是固态不金贵,大概就是一种特殊性癖喽,这也导致平常写代码能不写临时文件就不写,尽可能在内存操作完成
2020-10-16 19:31:19 +08:00
回复了 rikka 创建的主题 问与答 如何在完全不写硬盘的情况下播放一个远程视频?
@imn1 #27 嗯,我想明白了
2020-10-16 19:28:46 +08:00
回复了 rikka 创建的主题 问与答 如何在完全不写硬盘的情况下播放一个远程视频?
@msg7086 #25 嗯,我刚刚还在想如果播放器播放过程把整个视频一点一点读进内存,导致物理内存耗光,进而至使系统去写虚拟内存,也就是变相在写硬盘呢?但应该没谁这么蠢

心疼硬盘可能就是一种迷信吧😂
2020-10-16 19:12:11 +08:00
回复了 rikka 创建的主题 问与答 如何在完全不写硬盘的情况下播放一个远程视频?
@shenjinpeng #22 我想了想,Samba 、nfs 这些协议假设他不写本地硬盘缓存,好像就完全满足我的需求了
2020-10-16 18:54:52 +08:00
回复了 rikka 创建的主题 问与答 如何在完全不写硬盘的情况下播放一个远程视频?
@shenjinpeng #22 不知道我了解的对不对

m3u8 不就是把视频切片,播放过程把切片从服务端读回来,如果用浏览器播放,走的是 http 协议,不还是有在写缓存吗

而直播推流,好像可以用 websokct 来传输,是不写缓存了,但是没法控制播放进度啊
2020-10-16 17:27:17 +08:00
回复了 rikka 创建的主题 问与答 如何在完全不写硬盘的情况下播放一个远程视频?
@Ediacaran #10 这看起来是另外一种思路,用网络文件共享协议来搞,如果协议本实现底层在读过程不会有写操作的话,就看我本地播放器是否缓存了
2020-10-16 17:24:24 +08:00
回复了 rikka 创建的主题 问与答 如何在完全不写硬盘的情况下播放一个远程视频?
@supermoonie #16 用浏览器播放会写缓存啊
2020-10-16 17:24:05 +08:00
回复了 rikka 创建的主题 问与答 如何在完全不写硬盘的情况下播放一个远程视频?
@polaa #14
@natashahollyz #15
一顿折腾下来既解决了需求,又多少学到点东西,岂不美哉😁
1  2  3  4  5  6  7  8  9  10 ... 12  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   862 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 15ms · UTC 21:30 · PVG 05:30 · LAX 13:30 · JFK 16:30
Developed with CodeLauncher
♥ Do have faith in what you're doing.