首页 > 解决方案 > Node.js 错误 MissingSchemaError:尚未为模型“用户”注册模式。使用 mongoose.model(name, schema)

问题描述

我正在为我的聊天应用程序创建登录系统,但我遇到了错误 MissingSchemaError:模式尚未为模型“用户”注册。使用 mongoose.model(name, schema) 我正在关注教程,我使用了与教程相同的代码,这里是代码:

用户控制器.js:

const mongoose = require('mongoose')
const User = mongoose.model('User');
const sha256 = require('js-sha256')
const jwt = require('jwt-then')

exports.register = async (req, res) => {
    const {name, email, password} = req.body

    const emailRegex = /@gmail.com|@yahoo.com|@hotmail.com|@outlook.com|@live.com/

    if (!emailRegex.test(email)) throw 'Your Email domain is not supported.'
    if (password.length < 6) throw 'Your password needs to be at least 6 characters long.'

    const userExists = await User.findOne({
        email,

    })
    if (userExists) throw 'User already exists.'

    const user = new User({ name, email, password: sha256(password + process.env.SALT),
    })


    await user.save()

    res.json({
        message: 'User [' + name + '] registered successfully!'
    })
}

exports.login = async (req, res) => {
    const { email, password } = req.body
    const user = await User.findOne({
        email,
        password: sha256(password + process.env.SALT),
    })
  if (!user) throw 'Email and Password doesnt`t match!'

  const token = await jwt.sign({id: user.id}, process.env.SECRET)

  res.json({
      message: 'User logged in successfully!',
      token,
  })
}

标签: javascriptnode.jsmongodbmongoose

解决方案


Mongoose 中的一切都以 Schema 开始。每个模式映射到一个 MongoDB 集合并定义该集合中文档的形状。

首先,您需要为您的用户模型定义一个模式。

User.js在您的models目录中创建一个文件,

import mongoose from 'mongoose'

const { Schema } = mongoose

const userSchema = new Schema({
  name: String,
  password: String,
  email: String,
})

export default mongoose.model('user', userSchema)

现在在你的userControllers.js使用const User = require('./models/User')中使用你的模型。


推荐阅读