Hello, when i use axios get somedata from api , ERROR occurs and i cannot fix it , plz help .
createError.js:16 Uncaught (in promise) Error: Network Error
at createError (createError.js:16)
at XMLHttpRequest.handleError (xhr.js:69)
with chrome debug can get data from api with crud method, but with axios in vue caught error;
my vue config:
import axios from ‘axios’
import router from ‘@/router/routers’
import { Notification, MessageBox } from ‘element-ui’
import store from ‘../store’
import { getToken } from ‘@/utils/auth’
import Config from ‘@/settings’
// 创建axios实例
const service = axios.create({
baseURL: process.env.NODE_ENV === ‘production’ ? process.env.VUE_APP_BASE_API : ‘/’, // api 的 base_url
timeout: Config.timeout // 请求超时时间
})
// request拦截器
service.interceptors.request.use(
config => {
if (getToken()) {
config.headers[‘Authorization’] = getToken() // 让每个请求携带自定义token
}
// 数据交互走JSON
config.headers[‘Content-Type’] = ‘application/json’
return config
},
error => {
// Do something with request error
console.log(error) // for debug
Promise.reject(error)
}
)
// response 拦截器
service.interceptors.response.use(
response => {
const code = response.status
if (code < 200 || code > 300) {
Notification.error({
title: response.message
})
return Promise.reject(‘error’)
} else {
return response.data
}
},
error => {
let code = 0
try {
code = error.response.data.status
} catch (e) {
if (error.toString().indexOf(‘Error: timeout’) !== -1) {
Notification.error({
title: ‘网络请求超时’,
duration: 5000
})
return Promise.reject(error)
}
}
if (code) {
if (code === 401) {
MessageBox.confirm(
‘登录状态已过期,您可以继续留在该页面,或者重新登录’,
‘系统提示’,
{
confirmButtonText: ‘重新登录’,
cancelButtonText: ‘取消’,
type: ‘warning’
}
).then(() => {
store.dispatch(‘LogOut’).then(() => {
location.reload() // 为了重新实例化vue-router对象 避免bug
})
})
} else if (code === 403) {
router.push({ path: ‘/401’ })
} else {
const errorMsg = error.response.data.message
if (errorMsg !== undefined) {
Notification.error({
title: errorMsg,
duration: 5000
})
}
}
} else {
Notification.error({
title: ‘接口请求失败’,
duration: 5000
})
}
return Promise.reject(error)
}
)
export default service
but with server side it work fine
[2020-02-17 21:15:17.44329] [2492] [info] Creating Routes for resource ‘Device’ (controller => Device)
[2020-02-17 21:15:17.44358] [2492] [debug] GET /devices (api_get)
[2020-02-17 21:15:17.44372] [2492] [debug] POST /devices (api_create)
[2020-02-17 21:15:17.44385] [2492] [debug] DELETE /devices/ (api_delete)
[2020-02-17 21:15:17.44401] [2492] [debug] PUT /devices/ (api_update)
[2020-02-17 21:15:17.44420] [2492] [debug] GET /devices/download (api_download)
[2020-02-17 21:15:17.44449] [2492] [info] Creating Routes for resource ‘Firewall’ (controller => Firewall)
[2020-02-17 21:15:17.44463] [2492] [debug] GET /firewalls (api_get)
[2020-02-17 21:15:17.44476] [2492] [debug] POST /firewalls (api_create)
[2020-02-17 21:15:17.44487] [2492] [debug] DELETE /firewalls/ (api_delete)
[2020-02-17 21:15:17.44495] [2492] [debug] PUT /firewalls/ (api_update)
[2020-02-17 21:15:17.44512] [2492] [debug] GET /firewalls/download (api_download)
[2020-02-17 21:15:17.44751] [2492] [info] Listening at «http://0.0.0.0:8080»
Server available at http://0.0.0.0:8080
[2020-02-17 21:15:21.82063] [2492] [debug] [b3ad801b] GET «/devices»
[2020-02-17 21:15:21.82514] [2492] [debug] [b3ad801b] Routing to controller «FirewallManager::Controller::Device» and action «get»
$VAR1 = bless( {
‘headers’ => {
‘access-control-allow-origin’ => [
‘*’
],
‘server’ => [
‘PERL’
]
}
}, ‘Mojo::Headers’ );
[2020-02-17 21:15:21.82694] [2492] [debug] [b3ad801b] 200 OK (0.006289s, 159.008/s)
reques-header info:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36
Accept: /
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: username=admin; rememberMe=true; password=0PVUYoRt1BpfnQKrahkn6+s8Z7FZXgnVU+tyoq7lze9v3JUcQkha8p6MMubzp4nt3DGre6mFY5GH7potSol+7Q==;TOEKN=Bearer%20eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImF1dGgiOiJkZXB0OmVkaXQsdXNlcjpsaXN0LHN0b3JhZ2U6YWRkLGRlcHQ6YWRkLHN0b3JhZ2U6ZWRpdCxtZW51OmRlbCxyb2xlczpkZWwsYWRtaW4sc3RvcmFnZTpsaXN0LGpvYjplZGl0LGRlcGxveUhpc3Rvcnk6bGlzdCx1c2VyOmRlbCxzZXJ2ZXI6bGlzdCxkaWN0OmFkZCxkZXB0Omxpc3QsdGltaW5nOmFkZCxqb2I6bGlzdCxkaWN0OmRlbCxkaWN0Omxpc3QsYXBwOmxpc3Qsam9iOmFkZCxkYXRhYmFzZTpsaXN0LHRpbWluZzpsaXN0LGRlcGxveTpsaXN0LHJvbGVzOmFkZCx1c2VyOmFkZCxwaWN0dXJlczpsaXN0LG1lbnU6ZWRpdCx0aW1pbmc6ZWRpdCxtZW51Omxpc3Qsc3RvcmFnZTpkZWwscm9sZXM6bGlzdCxtZW51OmFkZCxqb2I6ZGVsLHVzZXI6ZWRpdCxyb2xlczplZGl0LHRpbWluZzpkZWwsZGljdDplZGl0LHNlcnZlckRlcGxveTpsaXN0LGRlcHQ6ZGVsIiwiZXhwIjoxNTgxOTU0NTM3fQ.FRDSUeMqV64gCK4UD7iFGWkPno-GW53Ibz29aUFeaH-f4LMiicelgHmQ7lkDuRO_WEHdTXZjJFRWQiW80mmsUg
server side headers info:
Access-Control-Allow-Origin: *
Content-Length: 3262
Date: Mon, 17 Feb 2020 13:56:10 GMT
Server: PERL
Content-Type: application/json;charset=UTF-8
also axios timeout is 10 mins
with curl -v also works :
- TCP_NODELAY set
- Connected to 127.0.0.1 (127.0.0.1) port 8080(#0)
GET /devices?page=0 HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: curl/7.61.1
Accept: /
< HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
< Content-Length: 3262
< Date: Mon, 17 Feb 2020 14:02:18 GMT
< Server: PERL
< Content-Type: application/json;charset=UTF-8
<
{«content»:[{«create_time»:»2020-02-17 17:19:46″,»id»:1,»ip»:»1.1.1.100″,»name»:»CC-DC1-NZX-S1″,»pwd»:»cisco»,»type»:»switch»,»user_name»:»cisco»},{«create_time»:»2020-02-17 17:19:53″,»id»:2,»ip»:»1.1.1.1″,»name»:»CC-DC1-NZX-S1″,»pwd»:»cisco»,»type»:»switch»,»user_name»:»cisco»}],»totalElements»:24}
+1 same issue. Response is Error: Network Error.
Does anyone have any sikutions?
Thank you.
Solved !!!
Because of the limitation of the CORS policy, the above problem is caused CORS. After the PROXY policy configured in VUE can be accessed normally, the OPTIONS response needs to be supported on the server side.
with vue_dev env need the server side support options method
[2020-02-18 19:07:35.58702] [2511] [debug] [69f30b6c] 200 OK (0.001815s, 550.964/s)
[2020-02-18 19:07:36.19296] [2511] [debug] [f4101b49] OPTIONS «/mojo/devices»
[2020-02-18 19:07:36.19325] [2511] [debug] [f4101b49] Routing to controller «FirewallManager::Controller::Device» and action «options»
[2020-02-18 19:07:36.19351] [2511] [debug] [f4101b49] 200 OK (0.000547s, 1828.154/s)
[2020-02-18 19:07:36.19753] [2511] [debug] [54488097] GET «/mojo/devices»
[2020-02-18 19:07:36.19791] [2511] [debug] [54488097] Routing to controller «FirewallManager::Controller::Device» and action «get»
$VAR1 = ‘SELECT * FROM device_info ORDER BY id desc LIMIT 10, 10’;
axios
locked and limited conversation to collaborators
May 22, 2020
I’ve been following this youtube tutorial code by code. To summarize, this tutorial teaches how to create a chat application using getstream-io and ReactJS with registration and authentication. After creating the sign up/login form the same way as the tutorial, when I clicked sign up, nothing happened, and instead printed these two errors in my console:
> POST https://localhost:5000/auth/signup net::ERR_CONNECTION_REFUSED
> Uncaught (in promise) Error: Network Error
at createError (createError.js:16:1) at XMLHttpRequest.handleError (xhr.js:117:1)
I checked the status of the errors to see the 3-digit code but they’re both «failed». I’m a newbie and forced to learn programming because our school prof won’t accept our simple prototype, so I’m not very knowledgeable in this field.
Here are the codes for anyone who can figure out how to solve this problem… Any help is very much appreciated. Advance thank you!
Auth.js [controllers] (server-side)
const { connect } = require('getstream');
const bcrypt = require('bcrypt');
const StreamChat = require('stream-chat').StreamChat;
const crypto = require('crypto');
require('dotenv').config();
const api_key = process.env.STREAM_API_KEY;
const api_secret = process.env.STREAM_API_SECRET;
const app_id = process.env.STREAM_APP_ID;
const signup = async (req, res) => {
try {
const { fullName, username, password, phoneNumber } = req.body;
const userId = crypto.randomBytes(16).toString('hex');
const serverClient = connect(api_key, api_secret, app_id);
const hashedPassword = await bcrypt.hash(password, 10);
const token = serverClient.createUserToken(userId);
res.status(200).json({ token, fullName, username, userId, hashedPassword, phoneNumber });
} catch (error) {
console.log(error);
res.status(500).json({ message: error });
}
};
const login = async (req, res) => {
try {
const { username, password } = req.body;
const serverClient = connect(api_key, api_secret, app_id);
const client = StreamChat.getInstance(api_key, api_secret);
const { users } = await client.queryUsers({ name: username });
if(!users.length) return res.status(400).json({ message: 'User not found' });
const success = await bcrypt.compare(password, users[0].hashedPassword);
const token = serverClient.createUserToken(users[0].id);
if(success) {
res.status(200).json({ token, fullName: users[0].fullName, username, userId: users[0].id});
} else {
res.status(500).json({ message: 'Incorrect password' });
}
} catch (error) {ads
console.log(error);
res.status(500).json({ message: error });
}
};
module.exports = { signup, login }
Auth.jsx (client-side)
import React, { useState } from 'react';
import Cookies from 'universal-cookie';
import axios from 'axios';
import signinImage from '../assets/signup.jpg';
const cookies = new Cookies();
const initialState = {
fullName: '',
username: '',
password: '',
confirmPassword: '',
phoneNumber: '',
avatarURL: '',
}
const Auth = () => {
const [form, setForm] = useState(initialState);
const [isSignup, setIsSignup] = useState(true);
const handleChange = async (e) => {
setForm({ ...form, [e.target.name]: e.target.value });
}
const handleSubmit = async (e) => {
e.preventDefault();
const { fullName, username, password, phoneNumber, avatarURL } = form;
const URL = 'https://localhost:5000/auth';
const { data: { token, userId, hashedPassword } } = await axios.post(`${URL}/${isSignup ? 'signup' : 'login'}`, {
username, password, fullName, phoneNumber, avatarURL
});
cookies.set('token', token);
cookies.set('username', username);
cookies.set('fullName', fullName);
cookies.set('userId', userId);
if(isSignup) {
cookies.set('phoneNumber', phoneNumber);
cookies.set('avatarURL', avatarURL);
cookies.set('hashedPassword', hashedPassword);
}
window.location.reload();
}
const switchMode = () => {
setIsSignup((prevIsSignup) => !prevIsSignup)
}
return (
<div className='auth__form-container'>
<div className='auth__form-container_fields'>
<div className='auth__form-container_fields-content'>
<p>{isSignup ? 'Sign Up' : 'Sign In'}</p>
<form onSubmit={handleSubmit}>
{isSignup && (
<div className='auth__form-container_fields-content_input'>
<label htmlFor='fullName'>Full Name</label>
<input
name='fullName'
type='text'
placeholder='Full Name'
onChange={handleChange}
required
/>
</div>
)}
<div className='auth__form-container_fields-content_input'>
<label htmlFor='username'>Username</label>
<input
name='username'
type='text'
placeholder='Username'
onChange={handleChange}
required
/>
</div>
{isSignup && (
<div className='auth__form-container_fields-content_input'>
<label htmlFor='phoneNumber'>Phone Number</label>
<input
name='phoneNumber'
type='text'
placeholder='Phone Number'
onChange={handleChange}
required
/>
</div>
)}
{isSignup && (
<div className='auth__form-container_fields-content_input'>
<label htmlFor='avatarURL'>Avatar URL</label>
<input
name='avatarURL'
type='text'
placeholder='Avatar URL'
onChange={handleChange}
required
/>
</div>
)}
<div className='auth__form-container_fields-content_input'>
<label htmlFor='password'>Password</label>
<input
name='password'
type='password'
placeholder='Password'
onChange={handleChange}
required
/>
</div>
{isSignup && (
<div className='auth__form-container_fields-content_input'>
<label htmlFor='confirmPassword'>Confirm Password</label>
<input
name='confirmPassword'
type='password'
placeholder='Confirm Password'
onChange={handleChange}
required
/>
</div>
)}
<div className='auth__form-container_fields-content_button'>
<button>{isSignup ? 'Sign Up' : 'Sign In'}</button>
</div>
</form>
<div className='auth__form-container_fields-account'>
<p>
{isSignup
? "Already have an account? "
: "Don't have an account? "
}
<span onClick={switchMode}>
{isSignup ? 'Sign In' : 'Sign Up'}
</span>
</p>
</div>
</div>
</div>
<div className='auth__form-container_image'>
<img src={signinImage} alt='sign in'/>
</div>
</div>
)
}
export default Auth
Index.js (server-side)
const express = require('express');
const cors = require('cors');
const authRoutes = require("./routes/auth.js");
const app = express();
const PORT = process.env.PORT || 5000;
require('dotenv').config();
app.use(cors({ origin: true}));
app.use(express.json());
app.use(express.urlencoded());
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.use('/auth', authRoutes);
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
Куки!!! Социальная сеть!!!
Ребята, проблема назревала и моё: ай, пока работает будет ещё год работать… Начало подводить! И в Chrome у многих начала всплывать проблема!
Вроде как я поставил нужные настройки для Cookie на сервере и теперь всё будет хорошо!
Если у вас само по себе не заработало, то вам нужно:
- вылогиниться с сайта (прямо где вы сейчас читаете эти строки)
- если не заработало, то для текущего сайта вам нужно зачитить Cookie (Панель разработчика — Application -Cookie — social-network… — очистить куки)
После этого должно быть всё ок.
В кратце, откуда суть проблемы…
Браузеры всё больше и больше паряться о безопасности данных, для этого заставили все сайты пересесть на https, для этого активировали CORS, и сейчас навязывают эти CORS даже для статики, защищают ваши куки с помощью атрибута SameSite… Последнее и явилось причиной!
Я давно видел уведомление, давно примерно знал, что куда и как, но… Пока петух не клюнет)) Вы понимаете: пока работает, ничего трогать и не будем!
Но пришлось. Если у вас по каким-то причинам не заработало, пишите в комменты! Будем решать проблему дальше!
#javascript #node.js #reactjs #post #axios
Вопрос:
У меня есть функция, которая получает данные из формы при ее отправке, и я пытаюсь отправить запрос с помощью axios с этими данными вот моя функция (reactjs):
const handelSubmit = (e) => {
e.preventDefault();
const newFact = {Email, Fact, Source};
axios.post('https://www.examplesite.com/create', {
"data": newFact})
.then(function (response) {
console.log(response);
})
}
вот часть кода для примера сайта (nodejs):
const app = express();
app.use(express.json());
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type,
Accept');
next();
});
app.get("/", async function(req, res) {
const result = await randomfact();
res.send(result);
console.log(randomfact());
});
app.post('/create', function(req, res) {
console.log(req.body);
});
let port = process.env.PORT;
if(port == null || port == "") {
port = 8000;
}
app.listen(port, function() {
console.log("Server started successfully");
});
моя проблема в том, что запрос на публикацию, похоже, не попадает на примерный сайт. Вот ошибка, которую я получил:
VM2633:1 POST https://www.examplesite.com/create net::ERR_NAME_NOT_RESOLVED
(anonymous) @ VM2633:1
dispatchXhrRequest @ xhr.js:177
xhrAdapter @ xhr.js:13
dispatchRequest @ dispatchRequest.js:52
Promise.then (async)
request @ Axios.js:61
Axios.<computed> @ Axios.js:87
wrap @ bind.js:9
handelSubmit @ Modal.js:14
callCallback @ react-dom.development.js:3945
invokeGuardedCallbackDev @ react-dom.development.js:3994
invokeGuardedCallback @ react-dom.development.js:4056
invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:4070
executeDispatch @ react-dom.development.js:8243
processDispatchQueueItemsInOrder @ react-dom.development.js:8275
processDispatchQueue @ react-dom.development.js:8288
dispatchEventsForPlugins @ react-dom.development.js:8299
(anonymous) @ react-dom.development.js:8508
batchedEventUpdates$1 @ react-dom.development.js:22396
batchedEventUpdates @ react-dom.development.js:3745
dispatchEventForPluginEventSystem @ react-dom.development.js:8507
attemptToDispatchEvent @ react-dom.development.js:6005
dispatchEvent @ react-dom.development.js:5924
unstable_runWithPriority @ scheduler.development.js:468
runWithPriority$1 @ react-dom.development.js:11276
discreteUpdates$1 @ react-dom.development.js:22413
discreteUpdates @ react-dom.development.js:3756
dispatchDiscreteEvent @ react-dom.development.js:5889
createError.js:16 Uncaught (in promise) Error: Network Error
at createError (createError.js:16)
at XMLHttpRequest.handleError (xhr.js:84)
createError.js:16 Uncaught (in promise) Error: Network Error
at createError (createError.js:16)
at XMLHttpRequest.handleError (xhr.js:84)
Комментарии:
1. похоже, проблема с dns. Пожалуйста, проверьте
https://www.examplesite.com/create
, работает ли этот URL-адрес. попробуйте отправить сообщение через почтальона и проверьте, работает ли оно2. Я сделал запрос на публикацию, используя reqbin.com и это работало отлично, так что я почти уверен, что это проблема с моим кодом, а не с dns, чтобы подтвердить это, я развернул сайт и запустил его, но все равно получил ту же ошибку
3. Хорошо, значит, это происходит с вашего сервера развертывания? Вы можете проверить настройки брандмауэра, если он блокируется.
4. Я смог решить свою проблему, переписав свою команду post
5. оказывается, это исправило проблему только при запуске на локальном хосте, но когда я попытался развернуть его, он сказал, что не пойман (в обещании) Ошибка: Запрос не удался с кодом состояния 405 не уверен, почему он работает только на локальном хосте код ошибки будет означать, что запросы на публикацию не разрешены, но я просто смог сделать один с локального хоста, что не имеет смысла