簡體   English   中英

為什么我不斷收到TypeError:用戶不是構造函數?

[英]Why do I keep getting TypeError: User is not a constructor?

我正在練習創建模型和路線,並正在使用郵遞員發送POST請求以對其進行測試。 但是,我不斷得到的用戶不是構造函數錯誤。

index.js(路由)

const express = require('express')
require('./db/mongoose')
const User = ('./models/user')

const app = express()
const port = process.env.PORT || 3000

app.use(express.json())

app.post('/users', (req, res) => {
    const user = new User(req.body)

    user.save().then(() => {
        res.send(user)
    }).catch(() => {

    })
})

app.listen(port, () => {
    console.log(port + ' is aliiiiiiiive!')
})

用戶(模式)

const mongoose = require('mongoose')
const validator = require('validator')

const User = mongoose.model('User', { 
    name: {
        type: String,
        required: true, 
        trim: true
    }, 
    email: {
        type: String,
        require: true,
        trim: true, 
        lowercase: true,
        validate(value) {
            if(!validator.isEmail(value)) {
                throw new Error('Email is invalid')
            }
        }
    },
    age: {
        type: Number,
        default: 0,
        validate(value) {
            if(value < 0) {
                throw new Error('Age must be a positive number.')
            }
        }
    },
    password: {
        type: String,
        trim: true,
        lowercase: true,
        required: true,
        minlength: 7,
        validate(value) {
            if( value.toLowerCase().includes("password")) {
                throw new Error("Password can't be 'password'.")
            }
        }
    }
})

module.exports = User

mongoose.js

const mongoose = require('mongoose')

mongoose.connect('mongodb://127.0.0.1:27017/task-manager-api', {
    useNewUrlParser: true,
    useCreateIndex: true
})

我希望它能將我在Postman上發送的以下信息發送回一個對象:

{
    "name": "Michael",
    "email": "email@eail.com",
    "password": "ThisIsAPassword"
}

您必須在編譯模型之前定義一個userSchema,如下所示:

const mongoose = require('mongoose')
const validator = require('validator')

const userSchema = new mongoose.Schema({ 
    name: {
        type: String,
        required: true, 
        trim: true
    }, 
    email: {
        type: String,
        require: true,
        trim: true, 
        lowercase: true,
        validate(value) {
            if(!validator.isEmail(value)) {
                throw new Error('Email is invalid')
            }
        }
    },
    age: {
        type: Number,
        default: 0,
        validate(value) {
            if(value < 0) {
                throw new Error('Age must be a positive number.')
            }
        }
    },
    password: {
        type: String,
        trim: true,
        lowercase: true,
        required: true,
        minlength: 7,
        validate(value) {
            if( value.toLowerCase().includes("password")) {
                throw new Error("Password can't be 'password'.")
            }
        }
    }
})

const User = mongoose.model('User', userSchema);
exports.User = User

現在它是一個構造函數,因為我們說User每個實例都是userSchemanew實例。

我想到了。 在index.js文件的第三部分,我省略了require。

代替這個:

const User = ('./models/user')

應該是這樣的:

const User = require('./models/user')

謝謝大家的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM