我有一个express应用程序部署在Heroku,但我有404(未发现)错误



一切工作在我的localhost:3000和使用localhost:5000的baseUrl

我将baseUrl更改为已部署的站点(https://mongodb-newsapi.herokuapp.com),但我得到一个错误,说我的站点未找到。

加载资源失败:服务器响应的状态是404(未找到)POST https://mongodb-newsapi.herokuapp.com/api/login 404 (Not Found)

this it my fetchDataApi:

import { axiosInstance } from './axios';
export const getDataApi = async (url, token) =>{
const res = await axiosInstance.get(`/api/${url}`,{
headers : {Authorization : token}
})
return res;
}
export const postDataApi =async (url, post, token) => {

const res = await axiosInstance.post(`/api/${url}`, post ,{
headers: {Authorization: token}
})

return res;

}
export const putDataApi = async (url , post, token) => {
const res = await axiosInstance.put(`/api/${url}`,post,{
headers :{Authorization: token}
})
return res;
}
export const patchDataApi = async (url , post, token) => {
const res = await axiosInstance.patch(`/api/${url}`, post , {
headers :{Authorization: token}
})
return res;
}
export const deleteDataApi = async (url , token) => {
const res = await axiosInstance.delete(`/api/${url}`,{
headers :{Authorization: token}
})
return res;
}

这是我的baseUrl:

import axios from 'axios';
export const axiosInstance = axios.create({
baseUrl: "https://mongodb-newsapi.herokuapp.com/api"
});
这是我的server.js:
require('dotenv').config();
const path = require('path');
const express = require("express");
const mongoose = require('mongoose');
const cookieparser = require('cookie-parser');
const authRouter = require('./routers/authRouter');
const userRouter = require('./routers/userRouter');
const app = express();
app.use(express.json())
app.use(cookieparser());
app.use('/api', authRouter);
app.use('/api', userRouter);
app.use(express.static(path.join(__dirname, "/client/build")));
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, '/client/build', 'index.html'));
});

我没有加猫鼬。连接,因为我有我的帐户。

,这是authCtrl:

const Users = require("../models/userModel");
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const authCtrl = {
register: async (req, res) => {
try {
const { fullName, userName, email, password } = req.body;
const newUsername = userName.toLowerCase().replace(/ /g, '');
const user_name = await Users.findOne({ userName: newUsername })
if(user_name) return res.status(400).json({ msg: 'This UserName Already Exist.' })
const Email = await Users.findOne({ email: email })
if(Email) return res.status(400).json({ msg: 'This Email Already Exist.' })
if(password.length < 8) return res.status(400).json({ msg: 'Password must be atleast 8 Characters.' })
const passwordHash = await bcrypt.hash(password, 15);
const newUser = new Users({
fullName, userName:newUsername, email, password:passwordHash
})
const access_token = createAccessToken({id: newUser._id});
const refresh_token = createRefreshToken({id: newUser._id});
console.log({access_token, refresh_token})
res.cookie('refreshtoken', refresh_token, {
httpOnly: true,
path: "/api/refresh_token",
maxAge: 24*30*60*60*1000
})
await newUser.save(); 

res.json({
msg: "Registered Success",
access_token,
user: {
...newUser._doc,
password: ''
}
})
} catch (error) {
res.status(500).json({ msg: error.message })
}
},
login: async (req, res) => {
try {
const {email , password} = req.body;
const user = await Users.findOne({email})
.populate("friends following" , "-password")
if(!user) return res.status(400).json({msg: 'User does not exists'})
const isMatch = await bcrypt.compare(password,user.password);
if(!isMatch) return res.status(400).json({msg: 'User Password is incorrect'})
const access_token= createAccessToken({id: user._id});
const refresh_token= createRefreshToken({id: user._id});

res.cookie('refreshtoken', refresh_token,{
httpOnly: true,
path:'/api/refresh_token',
maxAge: 24*30*60*60*1000  
})

res.json({
msg:"login sucess",
access_token,
user:{
...user._doc,
password:''
}
})
} catch (err) {
return res.status(500).json({msg: err.message})
}},logout: async ( req, res ) => {
try {
res.clearCookie('refreshtoken', {path: '/api/refresh_token'})
res.json({msg: "Logged out"})
} catch (error) {
return res.status(500).json({ msg: error.message })
}},generateAccessToken: async (req, res) => {
try {
const rf_token = req.cookies.refreshtoken;


if(!rf_token) return res.status(400).json({msg:"please login now"})
jwt.verify(rf_token, process.env.REFRESHTOKENSECRET, async(err,result)=>{
if(err) return res.status(400).json({msg:"Please login now"})
const user = await Users.findById(result.id).select("-password")
.populate("friends following")
if(!user) return res.status(400).json({msg:"user does not exist"})
const access_token= createAccessToken({id: result.id});
res.json({
access_token,
user
})

})
} catch (error) {
res.stauts(500).json({msg: error.message})
}},}const createAccessToken = ( payload) =>{
return jwt.sign(payload, process.env.ACCESSTOKENSECRET, {expiresIn: "1d"})}const createRefreshToken = ( payload) =>{
return jwt.sign(payload, process.env.REFRESHTOKENSECRET,{expiresIn: "30d"})}module.exports = authCtrl

这是github存储库:

https://github.com/Noobieprogrammer69/mongodb-heroku

我觉得你参考的文章或视频太多了。当我检查你的仓库时,你写了2-3种类型的代码来完成相同的任务。我建议你一次只关注两种资源。也许这对你有帮助。https://www.thapatechnical.com/2021/04/how-to-deploy-mern-projects-on-heroku.html

相关内容

最新更新