第一次在这里发帖,仅供引用。
下面是我自己文件中的“用户”模型。我创建架构并分配它。当我在 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/