我正在使用拦截器来转换我的响应。我想设置HttpStatus
内部,但我现在使用的代码不起作用。
import { CallHandler, ExecutionContext, NestInterceptor, SetMetadata } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { classToPlain } from 'class-transformer';
import { ApiResponse } from '../models/apiResponse';
export class TransformInterceptor implements NestInterceptor {
intercept(
context: ExecutionContext,
next: CallHandler<ApiResponse | any>,
): Observable<ApiResponse | any> {
return next.handle().pipe(
map(data => {
const http = context.switchToHttp();
const res = http.getResponse();
if(data instanceof ApiResponse) {
if(data.status !== undefined) {
res.status(data.status);
}
}
return classToPlain(data); …
Run Code Online (Sandbox Code Playgroud) 我是一个全新的 fastify,但我有一个 fastify 服务器正在运行。我想解析查询字符串,例如:
http://fake.com/?user=123&name=ali
Run Code Online (Sandbox Code Playgroud)
我想从上面的 URL 中获取“用户”和“名称”值。我目前的代码是这样的:
fastify.route({
method: 'GET',
url: '/',
handler: async (request, reply) => getCompanyUsers(request, reply, services)
});
Run Code Online (Sandbox Code Playgroud)
我想获取“user”和“name”的值,然后将这些值传递给 getCompanyUsers 函数。
任何帮助表示赞赏。
谢谢
request.querystring node.js query-string querystringparameter fastify
使用以下包/技术组合(及其相应的依赖项未列出)从服务器上的客户端接收文件上传的正确实现是什么:
graphql-upload
apollo-server-fastify
@nestjs/platform-fastify
(代码优先方法)理想情况下,我们正在尝试使用 NestJS GraphQL Code First 技术(除了多个文件而不是一个文件)来实现以下内容(来自apollo 服务器文件上传)
const { ApolloServer, gql } = require('apollo-server');
const typeDefs = gql`
type File {
filename: String!
mimetype: String!
encoding: String!
}
type Query {
uploads: [File]
}
type Mutation {
singleUpload(file: Upload!): File!
}
`;
const resolvers = {
Query: {
uploads: (parent, args) => {},
},
Mutation: {
singleUpload: (parent, args) => {
return args.file.then(file => {
//Contents of Upload scalar: https://github.com/jaydenseric/graphql-upload#class-graphqlupload
//file.stream …
Run Code Online (Sandbox Code Playgroud) 我有以下功能来打开数据库连接并运行我的 fastify 服务器实例 (server.js)
import fastify from "fastify";
import fastifyCors from "fastify-cors";
import { MongoClient } from "mongodb";
import characterRoute from "./routes/character";
import gearRoute from "./routes/gear";
import CharacterDAO from "./dao/character";
import GearDAO from "./dao/gear";
import { seedData } from "./dataSeed";
let connection;
let serverInstance;
// server startup command
export const startServer = async port => {
try {
serverInstance = fastify({ logger: false });
serverInstance.register(fastifyCors, {
origin: "*"
});
serverInstance.register(characterRoute);
serverInstance.register(gearRoute);
await serverInstance.listen(port, "0.0.0.0");
} catch (err) {
serverInstance.log.error(err);
process.exit(1); …
Run Code Online (Sandbox Code Playgroud) 我在尝试在我编写的拦截器中获取 NestJS 处理程序的路由时遇到问题。例如,如果控制器有这样的路由:
@Get('/params/:p1/:p2')
routeWithParams(@Param() params): string {
return `params are ${params.p1} and ${params.p2}`;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够以/param/:p1/:p2
编程方式获取价值。使用 url 和去参数化不是一种选择,因为实际上没有一种方法可以以 %100 密封的方式执行此操作。做了一些挖掘,但没有找到记录处理程序的路线的方法。想知道其他人有没有运气?这是我从项目中剥离的一些示例代码:
import { Injectable, ExecutionContext, CallHandler, NestInterceptor } from '@nestjs/common';
import { Observable } from 'rxjs';
import { Request } from 'express';
import { FastifyRequest } from 'fastify';
function isExpressRequest(request: Request | FastifyRequest): request is Request {
return (request as FastifyRequest).req === undefined;
}
@Injectable()
export class MyInterceptor implements NestInterceptor {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
intercept(context: ExecutionContext, next: CallHandler): Observable<any> …
Run Code Online (Sandbox Code Playgroud) 我想:
@Post('login')
async login(@Body() body: AuthDto, @Res() res: Response) {
const loginResponse = await this.authService.login(body);
console.log('loginResponse', loginResponse)
res.headers.set('x-access-token', loginResponse.access_token)
return loginResponse
}
Run Code Online (Sandbox Code Playgroud)
但没有骰子。我收到一个错误:
TypeError: Cannot read property 'set' of undefined
Run Code Online (Sandbox Code Playgroud) 所以我用 Fastify 替换了 ExpressJS,但我的问题是 Nest-Passport 不支持 fastify,我们有 Nest-Passport 的替代品吗?或者关于如何使用令牌保护nestJS中的RestAPI的任何解决方案?
所以我目前在我的组织中广泛使用 NestJS。出于身份验证的目的,我们使用我们自己的守卫。所以我的问题是,如果有任何方法可以将数据从警卫传递到控制器,除了response.locals
expressjs ,任何人都可以指导我吗?这对框架造成了严重的依赖,我现在不希望这样。
TIA。
我是 node.js 的 fastify 框架的新手,我在问fastify-plugin的确切用途是什么, 因为我无法理解它背后的想法。我尝试了一些带或不带插件的代码,但我没有注意到其中的区别。除了一些行为,如:
1- 我可以覆盖我启动的装饰器并用fastify-plugin包装它。
2- 我可以使用装饰器并将其与其他已注册的插件共享。
我是 Fastify 新手,我正在尝试用它设置 swagger 文档。我正在使用 TypeScript,我发现的所有示例都使用 JavaScript 和require
语法。
我尝试尽可能遵循示例,但现在我的文档没有显示/
我创建的路线的任何内容。
这是我当前的代码:
import fastifySwagger from '@fastify/swagger';
import fastifySwaggerUi from '@fastify/swagger-ui';
import Fastify from 'fastify';
import { errorBoundary } from './plugins/errorBoundary';
const fastify = Fastify({
logger: true
});
const port = process.env.PORT || 3003;
// Set custom error handler.
fastify.setErrorHandler(errorBoundary);
// Register @fastify/swagger plugin.
fastify.register(fastifySwagger, {
openapi: {
info: {
title: 'Forest Fire API',
description: 'Forest Fire API Documentation',
version: '1.0.0'
},
servers: [
{
url: 'http://localhost'
}
], …
Run Code Online (Sandbox Code Playgroud) fastify ×10
nestjs ×6
node.js ×4
javascript ×3
typescript ×3
express ×2
graphql ×1
jestjs ×1
openapi ×1
passport.js ×1
query-string ×1
reactjs ×1
swagger ×1