尽管该模型在另一个文件中工作,但我仍收到"User.findOne is not a function"错误消息。类似的问题答案不起作用



第一次在这里发帖,供参考。

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

我使用这种方法在数据库中找到一个用户,以便访问它的属性。我试过使用该模块。导出导出模型的方法,并尝试使用require()作为导入语句…两者都没有解决我的问题…被困在这个问题上有一段时间了,一些洞察力将是伟大的!(希望这是清楚的,让我知道)

"用户。findOne不是一个函数…">

模型/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/authrroutes .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 (Does NOT work here, error)

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 &模型在你的前端?我建议让一个端点/控制器负责在后端获取用户余额,然后简单地向后端发送请求并等待响应数据。

相关内容