سلام:
استاد بعد از تعریف روابط اینترفیس و اسکیما برای users,products،وقتی میخوام در create مقادیر رو ست کنم،خطا میده:
این خطا از همان خطایی است که وقتی شما در ویدیوی Users & Routes میخواستید router رو داینامیک کنید(بعد از register کردن روتر) برایتان گرفت.که کانفلیکت بود و مجبور شدید Router رو با RouterEngine جایگزین کنید.اینجا نمیدونم که این کانفلیکت است،و اگر هست چی با چی کانفلیکت دارد و اگر نیست مشکل کجاست.استاد خطایی رو که nodemon میگیره رو هم ضمیمه کردم.با سپاس.
---------------------------------------------------------------------
خطایnodemon:
11 Users.create({})
~~
node_modules/@types/mongoose/index.d.ts:3301:5
3301 create<TCreate = T>(...docs: CreateQuery<TCreate>[]): Promise<T>;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The last overload is declared here.
من بررسی کردم و انگار این مدل مشکلی داره که هنوز نتونستم پیدا کنم. اما از روش زیر هم می تونی داده ها رو ایجاد کنی.
public async create(req: Request, res: Response) {
const newUser = new UserModel({
first_name:req.body.first_name
})
await newUser.save()
};
سلام، لطفا کدهای مدل رو هم قرار بده از بلاک کد همین ویرایشگر برای کپی کردن کدها استفاده کن
schema:
import { model, Schema } from 'mongoose';
import IUser from './IUsers';
const userSchima: Schema = new Schema({
first_name: { type: String, required: true },
last_name: { type: String, required: true },
email: { type: String, required: true, unique: true },
mobile: { type: String, required: true, unique: true },
total_orders: { type: Number, required: true, default: 0 },
wallet: { type: Number, required: true, default: 0 },
created_at: { type: Date, default: Date.now }
});
export default model<IUser>('User', userSchima);
---------------------------------------------------------
interface:
import { Document } from 'mongoose';
export default interface IUser extends Document {
first_name: string;
last_name: string;
email: string;
mobile: string;
total_orders: number;
wallet: number;
created_at: Date
}
شما تمامی پارامتر های مورد نظر برای ایجاد کاربر رو در همون create بنویسید و بعد ببینید چه خطایی میده. من الان مشکلی در کدهای شما نمی بینم.
استاد همون خطارو میده.روی پراپرتی کلیک میکنم :
any
Cannot find name 'email'.
روی مقادیر هم که بیرون از {} ست کردم کلیک میکنم باز همون خطای پیشین رو میده.
Argument of type '"sina"' is not assignable to parameter of type 'Pick<{ _id: any; first_name: string; last_name: string; email: string; mobile: string; total_orders: string | number; wallet: string | number; created_at: string | number | Date; } & { ...; }, "first_name" | ... 5 more ... | "created_at"> & { ...; }'.
لطفا هر چیزی میخواید به صورت کد قرار بدید داخل بلاک کد باشه. الان کدهای که تکمیل کردید به همراه تصویر خطا رو قرار بدید.
استاد کل سورس کدم رو با اجازه فرستادم براتون.بجز node_module.من کل پروژه رو دو سه بار دیلیت کردم و از نو نوشتم.باز اینجا میرسه همین خطارو میگیره.
import { Request, Response } from 'express';
import User from './model/User';
class UsersControler {
public index(req: Request, res: Response) {
res.send({ allUsers: [] })
};
public async create(req: Request, res: Response) {
User.create(
first_name: 'sina',
last_name: 'kh',
email:'[email protected]' ,
mobile:'0932555533' ,
}
export default UsersControler;
اینم تصویر خطا:
Argument of type '"sina"' is not assignable to parameter of type 'Pick<{ _id: any; first_name: string; last_name: string; email: string; mobile: string; total_orders: string | number; wallet: string | number; created_at: string | number | Date; } & { ...; }, "first_name" | ... 5 more ... | "created_at"> & { ...; }'.
Type '"sina"' is not assignable to type 'Pick<{ _id: any; first_name: string; last_name: string; email: string; mobile: string; total_orders: string | number; wallet: string | number; created_at: string | number | Date; } & { ...; }, "first_name" | ... 5 more ... | "created_at">'.ts(2345)
استاد تو mongoo من یه دیتابیس به نام shop و داکیومنت users ایجاد کردم.اما در نهایت نتونستم داده ادد کنم به داکیومنت.
export default class UsersControler {
public index(req: Request, res: Response) {
res.send({ allUsers: [] })
};
public async create(req: Request, res: Response) {
const newUser = new UserModel({
first_name: req.body.first_name,
last_name: req.body.last_name,
email: req.body.email,
mobile: req.body.mobile
})
await newUser.save();
}
}
---------------------------
خطای nodemon:
application is running....
mongoo connection is open...
(node:7924) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'first_name'
of undefined
at create (C:\xampp\htdocs\SHOP_BACKEND\src\component\users\usersControler.ts:12:34)
at Layer.handle [as handle_request] (C:\xampp\htdocs\SHOP_BACKEND\node_modules\express\lib\router\layer.js:95:5)
at next (C:\xampp\htdocs\SHOP_BACKEND\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\xampp\htdocs\SHOP_BACKEND\node_modules\express\lib\router\route.js:112:3)
استاد این اصلا create نداره.سه روز وقتمو گرفت.این ست کردن مقادیر تو تابع کریت داره انجام میشه دیگه.دوباره تو مقادیر دادنی create لازم نیست.
من از این آدرس پیدا کردم:
https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mongoose
اگه نگاه کنین اصلا کریت نداره.یه نیومدل کرده و مقدار داده.
var UserModel: Model<IUser> = model<IUser>('User', UserSchema);
var user = new UserModel({name: 'Jane'});
user.username; // IUser properties are available
user.save(); // mongoose Document methods are available
UserModel.findOne({}, (err: any, user: IUser) => {
user.username; // IUser properties are available
user.save(); // mongoose Document methods are available
});
export default class UsersControler {
public index(req: Request, res: Response) {
res.send({ allUsers: [] })
};
public async create(req: Request, res: Response) {
const newUser = await new UserModel(
{
first_name: 'sina',
last_name: 'kj',
email: '[email protected]',
mobile: '6566'
}
);
await newUser.save();
res.send(newUser);
}
}