Coder Social home page Coder Social logo

ho-s / nestjs-graphql-typeorm-postgresql Goto Github PK

View Code? Open in Web Editor NEW
47.0 47.0 6.0 893 KB

NestJS + GraphQL + TypeORM + PostgresQL Boilerplate

License: MIT License

JavaScript 6.56% TypeScript 69.20% Dockerfile 0.18% Handlebars 24.06%
boilerplate boilerplate-template generator graphql graphql-playground jwt nest nestjs nestjs-backend nestjs-boilerplate nestjs-graphql nestjs-template node node-js nodejs passport postgresql typeorm typescript

nestjs-graphql-typeorm-postgresql's Introduction

Hi there, I'm Joo ๐Ÿ‘‹

Gmail Badge

Hi, I'm Byungho Joo.

Languages and Tools:

Hits

nestjs-graphql-typeorm-postgresql's People

Contributors

ho-s avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

nestjs-graphql-typeorm-postgresql's Issues

Error with Body must be a string. Received: undefined.

Hello @Ho-s
Thanks for this awesome boilerplate.
Unfortunately i've got some error > Error with Body must be a string. Received: undefined.

This is what i've tried.

  1. Clone this repo and install package with yarn install (node > 14)

  2. Run postgres with docker docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=1q2w3e4r -d postgres

image
  1. Generate jwt token and save on .development.env
.development.env
DB_HOST = localhost
DB_PORT = 5432
DB_USER = postgres
DB_PASSWORD = 1q2w3e4r
DB_NAME = postgres
PORT = 3000

JWT_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----"

JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3F65WsAW2eI4qnrzEu/K
oYq1Bn/zJRpEsBkQIz0g/sKhNJ0D4pLfEIF6ZJGFFI9NJNoSoIrg7SfjhvHNhP6A
Fsa3QNjkMrOCC2d/6xW8oFcsS++1MqJEsn5TJSm98rNvXpPT/DGFdUxE7cmoCL0k
lwzt+xk7eBRDUWhE3Z+1TBmVYEkO9oFVdCyXOwsEDlzsbuccxfrgwmf2WZne4Ecn
oy5i1nJci1TPDRgqOA9IrGncIdHIj80Fope3x3W42nKY8SBoI3HqSTQ08j7Ci7gq
xeBC5x6b847iWjqN7G978oPiD9PG7dEd8IWkrfjt1ru2NDcPO8reRHt1EUEyrMg2
epVi5uGpKoC4QouRVI+EeaA+zV9Q/wwwMOyNlaJJxZXWGPaDJSMID1uTqAdyjUL5
R0vk0TiBIGFxavxtBmJpdZhS9APs1vPPRDq/O6A+ZqnlwafaEJspQSn58xkiHWS3
ivOANlQuUMtnxoa+qeV8TxBGWNaKlisdRl2vIChMp5zLdArp/N4qm41Nsvfie7Nl
q5MFC/hS8JZuRewj1W1KR2D8anLfKD93Uf5Zml9FLUnwg7r67XNdwYwDb7BSLUdZ
hJCavbqbnEPnnXtPoxJ/IfCiIbJ2U6o7Rvbai0gnLx1kGkBxK67+kyhYl4/QsAE7
FF4BGAetAZ5OuqhefWlYcLsCAwEAAQ==
-----END PUBLIC KEY-----"

  1. Run yarn dev

  2. make mutation with playground

image
mutation Mutation($input: SignUpInput!) {
  signUp(input: $input) {
    jwt
    user {
      username
      createdAt
      updatedAt
    }
  }
}
{
  "input": {
    "nickname": "123",
    "password": "123",
    "username": "123"
  }
}
  1. And i got this error
    Error with Body must be a string. Received: undefined.

  2. In auth.service.ts - signUp i tired to debug with console.log

 async signUp(input: SignUpInput): Promise<JwtWithUser> {
    console.log(input);
    const doesExistId = await this.userService.getOne({
      where: { username: input.username },
    });
    if (doesExistId) {
      throw new BadRequestException('Username already exists');
    }
    console.log('hi');
    const user = await this.userService.create(input);

    return this.signIn(user);
  }
  1. And i got this output
SignUpInput { nickname: '123', password: '123', username: '123' }
[Nest] 67970  - 11/14/2023, 4:56:13 PM   ERROR [ExceptionsHandler] Body must be a string. Received: undefined.
  1. in user.service.ts tried to console.log query and it says undefined
getOne(qs: OneRepoQuery<User>, query?: string) {
  console.log(qs, query);
  return this.userRepository.getOne(qs, query);
}
{ where: { username: '123' } } undefined
  1. tried to remove check user exist, then mutation works well
  async signUp(input: SignUpInput): Promise<JwtWithUser> {
    console.log(input);
    // const doesExistId = await this.userService.getOne({
    //   where: { username: input.username },
    // });
    // console.log('hi1');
    // if (doesExistId) {
    //   throw new BadRequestException('Username already exists');
    // }

    const user = await this.userService.create(input);

    return this.signIn(user);
  }
image

the error might be belongs to custom CRUD
Can i get any helps for this ? ๐Ÿง

Querying relations through GraphQL

I noticed that GetManyInput does not have a relations key, and it doesn't seem like there is an automatic way (or manual way) to specify which relations should load, so they are being returned as null when requested through queries. Is this something that is to be implemented?

GetOne has query as undefined

Hello - was trying this and while make a call to the qql endpoint for getoneuser and getme -> the getone method fails as query is undefined. I have added jwt token in header. It calls validate method but the query is undefined.

query GetMe {
getMe {
nickname
id
username
}
}

{
"errors": [
{
"message": "Error",
"path": [
"getMe"
],
"locations": [
{
"line": 2,
"column": 3
}
],
"extensions": {
"__orginal": {
"code": "UNAUTHENTICATED",
"stacktrace": [
"UnauthorizedException: Error",
" at JwtStrategy.validate (C:\D-drive\PropertyGuru\exp\NestJS-GraphQL-TypeORM-PostgresQL-main\src\auth\strategies\jwt.strategy.ts:27:13)",
" at processTicksAndRejections (node:internal/process/task_queues:96:5)",
" at JwtStrategy.callback [as _verify] (C:\D-drive\PropertyGuru\exp\NestJS-GraphQL-TypeORM-PostgresQL-main\node_modules\@nestjs\passport\dist\passport\passport.strategy.js:11:44)"
],
"originalError": {
"message": "Error",
"error": "Body must be a string. Received: undefined.",
"statusCode": 401
}
},
"code": "UNAUTHENTICATED",
"message": "Error"
}
}
],
"data": null
}

Same class used for Entity and DTO, but it has some custom properties exposed to API but not stored in DB.

Hello friend. Good work on this repo. I am facing an issue and would like to know your thoughts.

Let's say I have below class:

@ObjectType()
@Entity()
export class User {
  @Field(() => ID)
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Field(() => String)
  @Column()
  username: string;

  @Column()
  yearOfBirth: number;

  @Field(() => Number)
  age: number;
}

When I create new users, I store their year of birth in database, but clients can query user's age directly (which I calculate it in graphql resolver before returning the response to the client). However this doesn't work with your setup since your code iterates through every field and transforms it into Select query before executing it into the DB.

When I run below query:
query User($input: GetOneInput!) {
user(input: $input) {
id
username
age
}
}

I get below error:
"message": "Property "age" was not found in "User". Make sure your query is correct."

How would you approach this?

Thank you in advance.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.