我在vuex商店成功登录之后存储令牌,如下所示:
axios.post('/api/auth/doLogin.php', params, axiosConfig)
.then(res => {
console.log(res.data); // token
this.$store.commit('login', res.data);
})
Run Code Online (Sandbox Code Playgroud)
axiosConfig是我只设置baseURL的文件,export default { baseURL: 'http://localhost/obiezaca/v2' }params只是发送到后端的数据.
我的vuex文件看起来是:
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export const store = new Vuex.Store({
state: {
logged: false,
token: ''
},
mutations: {
login: (state, response) => {
state.logged = true;
state.token = response;
console.log('state updated');
console.log('state.logged flag is: '+state.logged);
console.log('state.token: '+state.token);
},
logout: (state) => {
state.logged = false;
state.token = '';
}
}
});
Run Code Online (Sandbox Code Playgroud)
它工作正常,我可以根据 …
我创建了axios拦截器,负责在每个请求发送到我的rest API之前添加令牌.
import axios from 'axios';
import { store } from '../store/store';
export default function execute() {
axios.interceptors.request.use(function(config) {
const token = store.state.token;
if(token) {
config.headers.Authorization = `Bearer ${token}`;
console.log(config);
return config;
} else {
console.log('There is not token yet...');
return config;
}
}, function(err) {
return Promise.reject(err);
});
}
Run Code Online (Sandbox Code Playgroud)
正如您在第2行中所看到的,我正在导入vuex存储,这实际上是我的令牌存放的位置.在第8行中,我实际上将此标记添加到config对象中,然后在下一行中我正在安慰它.
它在我的main.js文件中执行,如下所示:
import interceptor from './helpers/httpInterceptor.js';
interceptor();
Run Code Online (Sandbox Code Playgroud)
令牌存在于我在控制台中看到的配置对象中(因为我安慰了config对象):
每当我按预期提出一些API请求时,它就会运行.如果存在令牌(登录后),它应该为每个请求添加令牌头.不幸的是它没有添加它,虽然它存在于配置对象上,这让我有点困惑.
它实际上并没有将令牌添加到实际请求,因为我可以在网络选项卡中看到:
这个屏幕截图当然是在登录后进行的,因此令牌已经在vuex存储中,并且在我执行注销功能(调用其余API)之后它安慰了config(拦截器的一部分).
结果我有来自我的其余API的400(错误请求)状态,因为我没有发送令牌.
编辑!!!
我在想什么可以添加到这个问题,以使其更好.我认为创建demo plunker是不可能的,所以我决定创建一个小的存储库演示,您可以下载并查看问题.我希望它有助于解决问题!
是否有任何API允许我们自动将资金转入其他银行账户?我发现我不能用paypal API 完成它.
我在一个银行帐户上有用户资金,在应用程序中执行某些操作后,我需要将这笔钱转移到其他用户银行帐户.
所以,一步一步地总结一下:
User1将钱汇入应用程序银行帐户.
几个小时后,User1通过单击按钮确认对应用程序的某些操作.
在User1点击按钮后,我想自动从应用程序银行账户转账到User2银行账户.
我已经在DB中获得了银行转账所需的所有信息.
我正在寻找API,这将允许我做第三步,无论他使用哪家银行,我都会自动从我的(app)银行账户转账到用户银行账户.
我是vue2JS的新手,目前我正试图在vue2中创建我的第一个服务.
我用这段代码创建了基本文件api.js:
import axios from 'axios';
export default () => {
return axios.create({
baseURL: 'http://localhost:8080/',
timeout: 10000,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是基本的axios配置,将在整个应用程序的每个服务中使用.
我将此文件导入我的服务:
import api from '../api.js';
export default {
getLatest () {
return api().get(`http://localhost/obiezaca/ob_serwer/api/article/getLatest.php`, {
headers: {
'Content-Type': 'application/json'
}
})
.then(function (response) {
console.log(response.data);
})
.catch(function (error) {
console.log(error);
});
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码负责向backend rest API发出http请求,这会给出JSON作为响应.
最后我想在我的组件<script></script>标签中使用这个服务:
<script>
import { getLatest } from '../../../services/articles/getLatest';
export default {
data () { …Run Code Online (Sandbox Code Playgroud) 因此,我正在尝试多种方式来从axios HTTP调用获取错误响应状态,并且正在发生奇怪的事情。
getData() {
axios.get(`/api/article/getObserved.php`, axiosConfig)
.then(response => {
console.log('success');
console.log(response);
})
.catch(err => {
console.log('error');
console.log(err.status);
console.log(err.response.status)
});
}
Run Code Online (Sandbox Code Playgroud)
因此,我正在调用我的getObserved端点,尽管它返回了http_response_code(503);它,但是.then()由于控制台日志“成功”字符串,它会分开。
这是从控制台输出的:
GET http://localhost/obiezaca/v2/api/article/getObserved.php 503(服务不可用)
成功favouriteArticles.vue?31bd:83
我已经完成了数百个这样的调用,.catch即使我没有像其他语言那样抛出异常,这也总是会出错。但是我也尝试这样:
getData() {
axios.get(`/api/article/getObserved.php`, axiosConfig)
.then(response => {
console.log('success');
console.log(response);
}, function (err) {
console.log('error');
console.log(err.status);
console.log(err.response.status);
})
.catch(err => {
console.log('error');
console.log(err.status);
console.log(err.response.status)
});
}
Run Code Online (Sandbox Code Playgroud)
尽管我的端点返回了503错误请求,但它仍然没有控制台“错误”。为什么?
我还想补充一点,我认为端点无法正常工作,因为我正在使用cURL和POSTMAN进行测试并手动进行测试,因此一切都很好。
编辑因为反应是不明确的时候,不从我的端点数据,我需要处理只有一个错误(有数据与否)我刚才做这样的事情:
getData() {
axios.get(`/api/article/getObserved.php`, axiosConfig)
.then(response => {
if(response) {
this.articles = response.data.records;
} else {
this.noFavourite …Run Code Online (Sandbox Code Playgroud) 我有自己的服务器,在该服务器上通过FTP上传了应用安装程序。它的名称是quickmargo Setup 1.0.0.exe,可以在以下位置获得
https://quickmargo.pl/dist/download/quickmargo安装1.0.0.exe
同样通过FTP,我上传latest.yml到了同一目录,可以在以下位置找到它
https://quickmargo.pl/dist/download/latest.yml
在我的index.js项目中,
import { autoUpdater } from 'electron-updater'
autoUpdater.setFeedURL('https://quickmargo.pl/dist/download');
autoUpdater.on('update-downloaded', () => {
autoUpdater.quitAndInstall()
});
autoUpdater.on('update-available', (ev, info) => {
alert('Update required!');
});
app.on('ready', async () => {
if (process.env.NODE_ENV === 'production') {
await autoUpdater.checkForUpdates()
}
});
Run Code Online (Sandbox Code Playgroud)
在package.json中"version": "1.0.0",,build:{}我有:
"win": {
"icon": "build/icons/icon.ico",
"publish": [{
"provider": "generic",
"url": "https://quickmargo.pl/dist/download"
}]
},
Run Code Online (Sandbox Code Playgroud)
(我不在乎其他平台)
现在,假设我已经对我的应用程序进行了一些更改,并且我想上传版本1.0.1,并且如果有人已经下载了安装程序并将其安装在我的计算机上,我希望我的应用程序自动更新。
请告诉我我到目前为止所做的一切是否还可以,下一步是什么。我考虑如下:
version为1.0.1package.json编辑
我执行了上述三个步骤,另外还上传了新的Latest.yml(版本1.0.1),结果是当我现在在其他PC上运行先前安装的版本(将新版本上传到服务器之前)1.0.0时,它没有检测到我向服务器添加了1.0.1,并且它没有更新或显示任何弹出窗口或其他内容。我做错了什么?
编辑2
我正在尝试自行解决问题,现在我上传了1.0.2,因此现在下载应用程序的链接是:
您好我正在尝试创建HEX到HSL转换器功能.我知道,起初我应该将HEX转换为RGB,然后从RGB转换为HSL.我使用StackOverflow中的一些脚本完成了这项工作.S和L正常工作但H(色调)不正常.我不知道为什么,这是我的代码:
toHSL: function(hex) {
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
var r = parseInt(result[1], 16);
var g = parseInt(result[2], 16);
var b = parseInt(result[3], 16);
r /= 255, g /= 255, b /= 255;
var max = Math.max(r, g, b), min = Math.min(r, g, b);
var h, s, l = (max + min) / 2;
if(max == min){
h = s = 0; // achromatic
} else {
var d = max - min;
s = l > 0.5 ? d / …Run Code Online (Sandbox Code Playgroud) 我需要对非常大(超过200k个元素)的对象数组执行2个过滤器,因此我希望我的代码在javascript中尽可能快。
第一个过滤器很简单,因为我只需要删除为空(null)的元素:
let validArr = originalArr.filter(el => { return el != null });
Run Code Online (Sandbox Code Playgroud)
第二个过滤器是检查是否validArr[i].name等于其他数组的元素之一。目前我是这样的:
for(let i = 0, l = validArr.length; i < l; i++) {
if (findInArray(validArr[i].name, otherArr)) {
finalArr.push({
name: validNpc[i].nick,
id: validNpc[i].id
});
}
}
const findInArray = (val, arr) => {
for(let i = 0, l = arr.length; i < l; i++) {
if(arr[i] === val) return true;
}
return false;
};
Run Code Online (Sandbox Code Playgroud)
在循环中,我有微优化,但是有O(n ^ 2)我想重构,但我不知道如何。
点击元素后,我正在执行函数,并且在成功之后,我想查看clicked元素的工具提示.
我在ngRepeat循环中显示了多个带有此工具提示的元素.但是我想只在currentTarget元素(被点击的元素)上更改工具提示.目前我正在显示工具提示作为来自控制器的插值字符串,并且在功能成功之后我正在更改此字符串.这导致带有此工具提示的每个元素都有新的工具提示,而不仅仅是被点击的工具提示.
<div ng-repeat="n in auctions">
<img src="img/heart_icon.png"
alt="Dodaj do wishlisty"
class="category__record-button--wishlist-icon"
data-ng-if="$parent.authentication.isAuth"
data-ng-click="addFollowAuction(n.id)"
uib-tooltip="{{ categoryConfig.followInfo }}"
tooltip-placement="top"
tooltip-trigger="'mouseenter'"
tooltip-append-to-body="true">
</div>
Run Code Online (Sandbox Code Playgroud)
所以categoryConfig.followInfo是这个字符串我上面写着,它是后更改addFollowAuction()功能成功:
$scope.addFollowAuction = function (auctionId) {
console.log(auctionId);
auctionsFollowService.addFollowAuction(auctionId)
.then(function (response) {
if(response.detail === 'success follow') {
$scope.categoryConfig.followInfo = 'Pomy?lnie dodano ten przedmiot do wishlisty!';
}
}, function (err) {
console.log('err adding to wishlist ' + err);
});
};
Run Code Online (Sandbox Code Playgroud)
然后从循环显示的所有图像都有新的工具提示信息,但我只想附加新信息到点击图像.我尝试使用,$event但由于我改变了$scope.categoryConfig.followInfo两种方式,它没有用.
如何仅将新工具提示信息附加到单击元素?