javascript - 尽管同一模型在另一个文件中工作,但我收到了 "User.findOne is not a function"错误消息。类似问题的答案无效

标签 javascript react-native mongoose

第一次在这里发帖,仅供引用。

下面是我自己文件中的“用户”模型。我创建架构并分配它。当我在 authRoutes 文件中使用这个模型时,它工作得很好,就像你想象的那样。但是,当我在一个屏幕文件中使用相同的导入时,我收到“User.findOne 不是函数”错误消息(链接如下)。

我正在使用此方法在数据库中查找用户以访问其属性。我尝试过使用 module.exports 方式导出模型,并尝试使用 require() 作为导入语句...都没有解决我的问题...在这个问题上停留了一段时间,一些见解会很棒! (希望这是清楚的,请告诉我)

"User.findOne is not a function..."

模型/User.js

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
    email: {
        type: String,
        unique: true,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    balance: {
        type: Number,
        default: 100,
    }
});

mongoose.model('userSchema', userSchema);

routes/authRoutes.js(在此处工作)

const mongoose = require('mongoose');
const User = mongoose.model('userSchema');

const express = require('express');
const router = express.Router();
//const User = require('../models/User');
const jwt = require('jsonwebtoken');



router.post('/signup', async (req, res) => {
    const {email, password} = req.body;

    try {
        const user = new User({email, password});
        await user.save();

        const token = jwt.sign({ userId: user._id}, 'SOME_SECRET_KEY');
        res.send({token});
    } catch (err) {
        return res.status(422).send(err.message);
    }

});

router.post("/signin", async (req, res) => {
    const {email, password} = req.body;

    if (!email || !password) {
        return res.status(422).send({error: "Must provide email and password."});
    }

    const user = await User.findOne({ email });

    if (!user) {
        return res.status(422).send({ error: "Invalid email or password"});
    }

    try {
        //await user.comparePassword(password);

        const token = jwt.sign({userId: user._id}, "SOME_SECRET_KEY");
        res.send({token, email});
    } catch (err) {
        return res.status(422).send({ error: "Invalid email or password"});
    }
})

screens/SomeScreen.js(此处不起作用,错误)

import React, {useContext, useState} from 'react'
import {View, StyleSheet, Text, ScrollView, TextInput, Button} from 'react-native';
//import { LinearGradient } from 'expo-linear-gradient';
import colors from '../../constants/colors';
import RecieverCard from '../../components/RecieverCard';
import HistoryCard from '../../components/HistoryCard';
import {Provider, Context} from "../context/AuthContext";
import AsyncStorage from "@react-native-async-storage/async-storage";

const mongoose = require('mongoose');
const User = mongoose.model('userSchema');

const getUserBalance = async (userEmail) => {
    let user;

    try {
        user = await User.findOne(userEmail);

    } catch(err) {
        console.log(err);
    }
    return user;
};

最佳答案

require 不是 React api,因此它无法在您的前端中工作。

您应该在 node.js 后端中使用它。

无论如何,为什么要在前端使用 Mongoose 和模型?我建议您创建一个端点/ Controller 负责在后端获取用户余额,然后只需向后端发送请求并等待响应数据。

关于javascript - 尽管同一模型在另一个文件中工作,但我收到了 "User.findOne is not a function"错误消息。类似问题的答案无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73044741/

相关文章:

javascript - React js删除处理程序删除数组中的第一个索引

javascript - 如何在 React native 中从一个屏幕转到另一个屏幕时使用动画进行屏幕转换?

javascript - React Native FlatList组件数据在firebase数据调用后不断刷新,无法一致显示Firebase数据

node.js - 在 Mongoose 中定义数组的首选方法是什么?

javascript - 尝试将node.js连接到mongodb,获得成功响应但没有连接

javascript - 谷歌地图中的侧边栏链接未从动态生成的标记加载

javascript - 对此,全局对象和全局范围的混淆

javascript - 循环数组并在下拉列表中显示 - Angular

android - 即使更新到 RN 0.58.4,React native 溢出也无法在 android 中工作

javascript - Mongoose 异步/等待