从数据库获取路由器后,从后端到前端获取数据



我正在构建一个 mern expo 应用程序登录和登录页面。单击登录按钮时,它应该登录,但我无法从后端获取数据,尽管我已经在路由器快递内进行了查找查询。我相信我的代码会帮助你更好地理解。

路由登录.js

const express = require("express");
const router = express.Router();
const User = require("../models/User");
router.post("/", async (req, res) => {
User.findOne({ email: req.body.email }).then((user) => {
if (!user) {
return res.status(404).json("Email or password is incorrect");
} else {
const foundUser = res.json(user);
}
});
});
module.exports = router;

服务器.js

const express = require("express");
const app = express();
const mongoose = require("mongoose");
const url = "mongodb://localhost/my-project1";
mongoose.connect(url, { useNewUrlParser: true });
const con = mongoose.connection;
app.use(express.json());
//Router
const routeSignIn = require("../route/routeSignIn");
app.use("/getUser", routeSignIn);
con.on("open", () => {
console.log("Database is connected...");
});
const server = app.listen(3000, () => {
const { address, port } = server.address();
console.log(`Server started. Listening at http://${address}:${port}`);
});

这就是问题所在,我无法从路由器获取它

登录.js

const loginHandle = (email, password) => {
axios
//The address here is my laptop IP address, because i wanted to link my mern server with expo server
.get("http://192.168.29.7:3000/getUser") 
.then((res) => {
if (!res) {
Alert.alert("Invalid User, Username or password is incorrect.");
}
})
.catch((err) => {
console.log("Error fetching data : ", err);
});
if (data.email.length == 0 || data.password.length == 0) {
Alert.alert("Email or password field cannot be empty");
}
};

应用.js

const authContext = useMemo(
() => ({
signIn: async (email) => {
const userToken = String(foundUser);
try {
await AsyncStorage.setItem("userToken", userToken);
} catch (err) {
console.log("SignIn error", err);
}
dispatch({ type: "LOGIN", email: email, token: userToken });
},
}),
[]
);

正如您在上面看到的,我想做的是在路由(在 routeSignIn.js 中)与特定用户进行路由后,我想获取该数据(从登录.js)并将该数据传递到 App.js 以调度它。请注意,化简器函数与调度功能位于同一文件 (App.js) 中。

我认为您可以通过从数据库发布和检索数据的方式检测到几个问题。

首先,您使用的是axios.get函数而不是axios.post,并且将其发布到根本不存在的URL("http://192.168.29.7:3000/getUser")。相反,您将需要使用类似"/getUser/login".还要将您的常量定义为loginHandle = userData,并在userData将电子邮件定义为user.email,密码定义为user.password

在服务器端,您可能希望使用端口 3000 或 5000,看看哪个效果最好,因为有时您可能需要在端口 5000 上运行服务器。

routeSignIn.js文件中,请改用router.post("/login",以确保路由到正确的 URL。

我不太确定你的app.js所以不打算对此发表评论。

希望这在某种程度上可以解决您的问题,但我建议您尽可能多地遵循这一点,当您熟悉 NodeJS 和 React 时,请自定义代码。

最新更新