【发布时间】:2022-03-04 12:27:33
【问题描述】:
我正在创建应用程序,我在其中使用 NestJs 框架并使用带有 mongoose ORM 的 mongodb 数据库我有嵌套的数据结构,我试图将其保存在数据库中,但是当我保存它时它会抛出错误。以下是我的错误:
[Nest] 11196 - 19/02/2022, 6:01:30 pm ERROR [ExceptionsHandler] Cannot set property 'city' of undefined
TypeError: Cannot set property 'city' of undefined
at UserService.addUser (D:\nest\nested-schema-proj\src\user\user.service.ts:18:27)
at UserController.addUser (D:\nest\nested-schema-proj\src\user\user.controller.ts:11:33)
以下是邮递员要求:
当我将数据作为原始 JSON 发布时,可以在下面的屏幕截图中看到它已成功添加。那么为什么它不使用第一种方式添加
下面是我的代码:
user.schema.ts
import mongoose from "mongoose";
const addressSchema = new mongoose.Schema({
city:{type:String},
state:{type:String}
});
export const UserSchema = new mongoose.Schema({
name:{type:String},
age:{type:Number},
address:addressSchema
});
interface Address{
city:string;
state:string;
}
export interface AllUser{
name:string;
age:number;
address:Address;
}
user.dto.ts
export class UserDto{
name:string;
age:number;
address:Address
}
class Address{
city:string;
state:string;
}
user.controller.ts
import { Body, Controller, Post } from '@nestjs/common';
import { UserDto } from './dto/user.dto';
import { UserService } from './user.service';
@Controller()
export class UserController {
constructor(private userService:UserService){}
@Post('addUser')
addUser(@Body() userDto:UserDto){
return this.userService.addUser(userDto);
}
}
user.service.ts
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model} from 'mongoose';
import { UserDto } from './dto/user.dto';
import { AllUser } from './schema/user.schema';
@Injectable()
export class UserService {
constructor(@InjectModel('AllUser') private readonly userModel:Model<AllUser>){}
async addUser(userDto:UserDto): Promise<AllUser>{
console.log(userDto);
const data = new this.userModel();
data.name = userDto.name;
data.age = userDto.age;
data.address.city = userDto.address.city; //Showing error in this line
data.address.state = userDto.address.state;
const result = await data.save();
return result;
//Posting data as a raw JSON as shown in 2nd screenshot
// const data = new this.userModel(userDto);
// const result = await data.save();
// return result;
}
}
有人让我知道我做错了什么。任何帮助将不胜感激。
【问题讨论】:
-
打印
console.log(userDto);时是否可以查看日期 -
是的,它在控制台中可见
-
我已经在帖子中更新了
user.service.ts文件,看看我尝试使用原始 JSON 格式添加数据并添加了它,但为什么它不使用第一种方式添加。
标签: node.js mongodb mongoose nestjs mongoose-schema