mongodb - 无法在反应中代理请求 ECONNREFUSED
问题描述
在不更改我的授权代码并影响我的用户登录的情况下,我的连接如何被服务器拒绝?
获取:ERR_BLOCKED_BY_CLIENT
代理错误:无法将请求 /api/auth 从 localhost:3000 代理到 http://localhost:5000/ (ECONNREFUSED)。
用 mongoDb 创建了一个迷你社交应用程序,我的用户叹气并登录 mongoDB 没有问题。我有一个添加内容博客的错误表单,发现我必须将我的 accessToken 和 Access 密钥放置在我的项目中,并将我的转换为 useEffect,然后显示我的博客页面,但我的用户登录和登录有问题向上。
我的终端下面有这些错误。api/授权
const express = require('express');
const router = express.Router();
const bcrypt = require('bcryptjs');
const auth = require('../../middleware/auth');
const jwt = require('jsonwebtoken');
const config = require('config');
const { check, validationResult } = require('express-validator');
const User = require('../../models/User');
//@route GET api/auth
// @desc Test route
// @access public
router.get('/', auth, async (req, res) => {
try{
const user = await User.findById(req.user.id).select('-password');
res.json(user);
} catch(err){
console.error(err.message);
res.status(500).send('Server Error');
}
});
//@route POST api/auth
// @desc Authenticate user & get token
// @access Public
router.post('/',
[
check('email', 'Please include a valid email').isEmail(),
check('password', 'Password is required').exists()
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const { email, password } = req.body;
try {
// See if user exists
let user = await User.findOne({ email });
if(!user){
return res.status(400).json({ errors: [{ msg: 'Invalid Credentials'}] });
}
const isMatch = await bcrypt.compare(password, user.password);
if(!isMatch){
return res
.status(400)
.json({ errors: [{ msg: 'Invalid Credentials'}] });
}
// Return jsonwebtoken
const payload = {
user: {
id: user.id
}
};
jwt.sign(
payload,
config.get('jwtSecret'),
{ expiresIn: 360000 },
(err, token) => {
if (err) throw err;
res.json({ token });
}
);
} catch (err) {
console.error(err.message);
res.status(500).send('Server error');
}
}
);
// routes/api/auth.js
module.exports = router;
/api/配置文件
const express = require("express");
const axios = require("axios");
const config = require("config");
const router = express.Router();
const auth = require("../../middleware/auth");
const { check, validationResult } = require("express-validator");
const Profile = require("../../models/Profile");
const User = require("../../models/User");
const Post = require("../../models/Post");
//@route GET api/profile/me
// @desc get current Users
// @access private
router.get("/me", auth, async (req, res) => {
try {
const profile = await Profile.findOne({
user: req.user.id,
}).populate("user", ["name", "avatar"]);
if (!profile) {
return res.status(400).json({ msg: "There is no profile for this user" });
}
res.json(profile);
} catch (err) {
console.error(err.message);
res.status(500).send("Server Error");
}
});
//@route POST api/profile
// @desc Create or update user profile
// @access private
router.post(
"/",
[
auth,
[
check("status", "Status is required").not().isEmpty(),
check("skills", "Skills is required").not().isEmpty(),
],
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const {
company,
website,
location,
bio,
status,
githubusername,
skills,
youtube,
facebook,
twitter,
instagram,
spotify,
soundcloud,
lastfm,
} = req.body;
// Build profile object
const profileFields = {};
profileFields.user = req.user.id;
if (company) profileFields.company = company;
if (website) profileFields.website = website;
if (location) profileFields.location = location;
if (bio) profileFields.bio = bio;
if (status) profileFields.status = status;
if (githubusername) profileFields.githubusername = githubusername;
if (skills) {
profileFields.skills = skills.split(",").map((skill) => skill.trim());
}
//Build social object
profileFields.social = {};
if (youtube) profileFields.social.youtube = youtube;
if (twitter) profileFields.social.twitter = twitter;
if (facebook) profileFields.social.facebook = facebook;
if (spotify) profileFields.social.spotify = spotify;
if (instagram) profileFields.social.instagram = instagram;
if (soundcloud) profileFields.social.soundcloud = soundcloud;
if (lastfm) profileFields.social.lastfm = lastfm;
try {
let profile = await Profile.findOne({ user: req.user.id });
if (profile) {
// Update
profile = await Profile.findOneAndUpdate(
{ user: req.user.id },
{ $set: profileFields },
{ new: true }
);
return res.json(profile);
}
// Create
profile = new Profile(profileFields);
await profile.save();
res.json(profile);
} catch (err) {
console.error(err.message);
res.status(500).send("Server Error");
}
}
);
//@route GET api/profile
// @desc Get all profiles
// @access Public
// routes/api/profile.js
router.get("/", async (req, res) => {
try {
const profiles = await Profile.find().populate("user", ["name", "avatar"]);
res.json(profiles);
} catch (err) {
console.error(err.message);
res.status(500).send("Server Error");
}
});
//@route GET api/profile/user/:user_id
// @desc Get profile by user ID
// @access Public
// routes/api/profile.js
router.get("/user/:user_id", async (req, res) => {
try {
const profile = await Profile.findOne({
user: req.params.user_id,
}).populate("user", ["name", "avatar"]);
if (!profile) return res.status(400).json({ msg: "Profile not found" });
res.json(profile);
} catch (err) {
console.error(err.message);
if (err.kind == "ObjectId") {
return res.status(400).json({ msg: "Profile not found" });
}
res.status(500).send("Server Error");
}
});
//@route DELETE api/profile
// @desc Delete profile, user & posts
// @access Private
router.delete("/", auth, async (req, res) => {
try {
// @todo - Remove users posts
await Post.deleteMany({ user: req.user.id });
// Remove profile
await Profile.findOneAndRemove({ user: req.user.id });
// Remove user
await User.findOneAndRemove({ _id: req.user.id });
res.json({ msg: "User deleted" });
} catch (err) {
console.error(err.message);
res.status(500).send("Server Error");
}
});
//@route PUT api/profile/experience
// @desc Add profile experience
// @access Private
router.put(
"/experience",
[
auth,
[
check("title", "Title is required").not().isEmpty(),
check("company", "Company is required").not().isEmpty(),
check("from", "From is required").not().isEmpty(),
],
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const {
title,
company,
location,
from,
to,
current,
description,
} = req.body;
const newExp = {
title,
company,
location,
from,
to,
current,
description,
};
try {
const profile = await Profile.findOne({ user: req.user.id });
profile.experience.unshift(newExp);
await profile.save();
res.json(profile);
} catch (err) {
console.error(err.message);
res.status(500).send("Server Error");
}
}
);
//@route DELETE api/profile/experience/:exp_id
// @desc Delete experience from profile
// @access Private
router.delete("/experience/:exp_id", auth, async (req, res) => {
try {
const profile = await Profile.findOne({ user: req.user.id });
// get remove index
const removeIndex = profile.experience
.map((item) => item.id)
.indexOf(req.params.exp_id);
profile.experience.splice(removeIndex, 1);
await profile.save();
res.json(profile);
} catch (err) {
console.error(err.message);
res.status(500).send("Server Error");
}
});
//@route PUT api/profile/education
// @desc Add profile education
// @access Private
router.put(
"/education",
[
auth,
[
check("school", "School is required").not().isEmpty(),
check("degree", "Degree is required").not().isEmpty(),
check("fieldofstudy", "Field of study is required").not().isEmpty(),
check("from", "From is required").not().isEmpty(),
],
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const {
school,
degree,
fieldofstudy,
from,
to,
current,
description,
} = req.body;
const newEdu = {
school,
degree,
fieldofstudy,
from,
to,
current,
description,
};
try {
const profile = await Profile.findOne({ user: req.user.id });
profile.education.unshift(newEdu);
await profile.save();
res.json(profile);
} catch (err) {
console.error(err.message);
res.status(500).send("Server Error");
}
}
);
//@route DELETE api/profile/education/:edu_id
// @desc Delete education from profile
// @access Private
router.delete("/education/:edu_id", auth, async (req, res) => {
try {
const profile = await Profile.findOne({ user: req.user.id });
// get remove index
const removeIndex = profile.education
.map((item) => item.id)
.indexOf(req.params.edu_id);
profile.education.splice(removeIndex, 1);
await profile.save();
res.json(profile);
} catch (err) {
console.error(err.message);
res.status(500).send("Server Error");
}
});
//@route GET api/profile/github/:username
// @desc Get user repos from Github
// @access Public
router.get("/github/:username", async (req, res) => {
try {
const uri = encodeURI(
`https://api.github.com/users/${req.params.username}/repos?per_page=5&sort=created:asc`
);
const headers = {
"user-agent": "node.js",
Authorization: `token ${config.get("githubToken")}`,
};
request(options, (error, response, body) => {
if (error) console.error(error);
if (response.statusCode !== 200) {
return res.status(404).json({ msg: "No Github profile found" });
}
res.json(JSON.parse(body));
});
} catch (err) {
console.error(err.message);
return res.status(500).send("Server Error");
}
});
module.exports = router;
/api/用户
const express = require('express');
const router = express.Router();
const gravatar = require('gravatar');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const config = require('config');
const { check, validationResult } = require('express-validator');
const User = require('../../models/User');
//@route POST api/users
// @desc Register user
// @access public
router.post('/',
[
check('name', 'Name is required')
.not()
.isEmpty(),
check('email',
'Please include a valid email').isEmail(),
check(
'password',
'Please enter a password with 6 or more characters')
.isLength({ min: 6 })
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const { name, email, password } = req.body;
try {
// See if user exists
let user = await User.findOne({ email });
if(user){
return res.status(400).json({ errors: [{ msg: 'User already exists'}] });
}
// Get users gravatars
const avatar = gravatar.url(email, {
s: '200',
r: 'pg',
d: 'mm'
})
user = new User({
name,
email,
avatar,
password
});
// Encrypt password
const salt = await bcrypt.genSalt(10);
user.password = await bcrypt.hash(password, salt);
await user.save();
// Return jsonwebtoken
const payload = {
user: {
id: user.id
}
};
jwt.sign(
payload,
config.get('jwtSecret'),
{ expiresIn: 360000 },
(err, token) => {
if (err) throw err;
res.json({ token });
}
);
} catch (err) {
console.error(err.message);
res.status(500).send('Server error');
}
}
);
// routes/api/users.js
module.exports = router;
解决方案
推荐阅读
- excel - 将列从一张工作表复制到新工作表
- bash - BubbleSort Bash 没有排序
- typescript - 禁止生产构建的控制台输出
- java - 如何在 JButtom 后面制作 fillPolygon(s)
- ionic-framework - 检查我的 ionic 应用程序在 AppStore 和 PlayStore 上是否有新版本
- amazon-web-services - AWS 登录 Web 应用程序的方式
- flutter - 如何在文本表单域中向我的文本编辑控制器添加新值?
- ansible - Ansible 中的条件
- jenkins-pipeline - Oracle Cloud Infrastructure 的 Webhook - 容器注册表
- reactjs - 有没有办法用反应路由器链接到新页面?