Запись не будет сохранена в базе данных с помощью Nestjs и TypeOrm (запросы работают) - PullRequest
1 голос
/ 11 марта 2019

Когда я отправляю запрос, он не сохраняет мою сущность в базе данных и не сообщает о каких-либо ошибках или предупреждениях.

Контроллер:

@Controller('recipes')

export class RecipesController {
  constructor(private readonly recipeService: RecipesService) {}
  @Get()
  async findAll(): Promise<Recipe[]> {
    return this.recipeService.findAll();
  }

  @Post()
  async create(@Body() createRecipeDto: Recipe) {
    this.recipeService.create(createRecipeDto);
  }
}

Услуги:

@Injectable()
export class RecipesService {
    constructor(@InjectRepository(Recipe) private readonly recipeRepository: Repository<Recipe>) {}

    async create(recipe: Recipe) {
        const d = await this.recipeRepository.create(recipe);
        console.log("d:", d);
    }

    async findAll() {
        return await this.recipeRepository.find();
    }
}

Организация:

@Entity()
export class Recipe {
  @PrimaryGeneratedColumn()
  id: number;

  //   @IsString()
  @Column()
  name: string;

  //   @IsString()
  @Column('text')
  description?: string;

  //   @IsString()
  @Column()
  image: string;

  //   @IsArray()
  ingredients: string[];

  //   @IsArray()
  instructions: string[];

  //   @IsString()
  @Column()
  prepTime?: string;

  //   @IsString()
  @Column()
  cookTime?: string;

  //   @IsString()
  @Column()
  yield?: string;

  //   @IsNumber()
  @Column('int')
  rating?: number;

  //   @IsArray()
  keywords?: string[];

  //   @IsArray()
  categories: string[];

  //   @IsString()
  @Column()
  cuisine?: string;

  //   @IsBoolean()
  @Column('boolean')
  draft?: boolean;
}

Мой запрос с использованием Почтальона:

curl -X POST \
  http://localhost:3000/recipes \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: f23b5d42-1c40-4dae-b9b8-b32b733f38b4' \
  -H 'cache-control: no-cache' \
  -d '{
    "name":"recipe5",
    "description": "desc",
    "image": "http://..",
    "ingredients": ["-"],
    "instructions": ["1"],
    "prepTime": "1:20",
    "cookTime": "1:00",
    "yield": "8 servings",
    "rating": 4,
    "keywords": ["1"],
    "categories": ["cat1", "cat2"],
    "cuisine": "American",
    "draft": false
}'

Возвращает 201. Мой вызов GET возвращает только запись, которую я создал вручную.

1 Ответ

3 голосов
/ 11 марта 2019

Я обнаружил проблему!

TypeOrm's Repository.create фактически не сохраняет сущность в хранилище.Для этого вам нужно позвонить Repository.save.

Это изменение в моем сервисе исправило мою проблему:

С:

const d = await this.recipeRepository.create(recipe);

до:

const d = await this.recipeRepository.save(recipe);
...