۱۲ سینا-همتی
error در ست کردن مقادیر create
کیوان علی محمدی حل شده توسط کیوان علی محمدی

سلام:
استاد بعد از تعریف روابط اینترفیس و اسکیما برای 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.

سلام، لطفا کدهای مدل رو هم قرار بده از بلاک کد همین ویرایشگر برای کپی کردن کدها استفاده کن 

کیوان علی محمدی ۱۶ شهریور ۱۳۹۹، ۱۷:۰۶
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:'a@a.com' ,
            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)

 

سینا-همتی ۱۷ شهریور ۱۳۹۹، ۰۸:۱۴

من بررسی کردم و انگار این مدل مشکلی داره که هنوز نتونستم پیدا کنم. اما از روش زیر هم می‌تونی داده‌ها رو ایجاد کنی.

    public async create(req: Request, res: Response) {
        const newUser = new UserModel({
            first_name:req.body.first_name
        })
        await newUser.save()
    };

 

بهترین پاسخ
کیوان علی محمدی ۱۷ شهریور ۱۳۹۹، ۱۰:۵۰

استاد تو 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: 'a@a.com',
                mobile: '6566'
            }
        );
        await newUser.save();
        res.send(newUser);
    }
}

 

سینا-همتی ۱۸ شهریور ۱۳۹۹، ۱۸:۵۶