小编dop*_*ode的帖子

使用vuex的vue 2 JS中的Axios拦截器

我在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)

它工作正常,我可以根据 …

interceptor vue.js axios vuex vuejs2

20
推荐指数
1
解决办法
2万
查看次数

Axios拦截器令牌头存在于配置中,但不存在于请求头中

我创建了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对象):

IMG

每当我按预期提出一些API请求时,它就会运行.如果存在令牌(登录后),它应该为每个请求添加令牌头.不幸的是它没有添加它,虽然它存在于配置对象上,这让我有点困惑.

它实际上并没有将令牌添加到实际请求,因为我可以在网络选项卡中看到:

imgd

这个屏幕截图当然是在登录后进行的,因此令牌已经在vuex存储中,并且在我执行注销功能(调用其余API)之后它安慰了config(拦截器的一部分).

结果我有来自我的其余API的400(错误请求)状态,因为我没有发送令牌.

编辑!!!

我在想什么可以添加到这个问题,以使其更好.我认为创建demo plunker是不可能的,所以我决定创建一个小的存储库演示,您可以下载并查看问题.我希望它有助于解决问题!

javascript http interceptor axios vuejs2

10
推荐指数
1
解决办法
3149
查看次数

自动将资金从一个银行帐户转移到另一个银行帐户

是否有任何API允许我们自动将资金转入其他银行账户?我发现我不能用paypal API 完成它.

我在一个银行帐户上有用户资金,在应用程序中执行某些操作后,我需要将这笔钱转移到其他用户银行帐户.

所以,一步一步地总结一下:

  • User1将钱汇入应用程序银行帐户.

  • 几个小时后,User1通过单击按钮确认对应用程序的某些操作.

  • 在User1点击按钮后,我想自动从应用程序银行账户转账到User2银行账户.

我已经在DB中获得了银行转账所需的所有信息.

我正在寻找API,这将允许我做第三步,无论他使用哪家银行,我都会自动从我的(app)银行账户转账到用户银行账户.

api paypal backend banking payu

7
推荐指数
1
解决办法
4193
查看次数

vue2JS中的服务 - 创建的钩子中的错误

我是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)

service async-await axios vuejs2

7
推荐指数
1
解决办法
240
查看次数

Axios HTTP调用始终被视为成功

因此,我正在尝试多种方式来从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)

javascript http axios

5
推荐指数
1
解决办法
1936
查看次数

使用自己的服务器设置电子自动更新程序

我有自己的服务器,在该服务器上通过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,并且如果有人已经下载了安装程序并将其安装在我的计算机上,我希望我的应用程序自动更新。

请告诉我我到目前为止所做的一切是否还可以,下一步是什么。我考虑如下:

  • 更改version1.0.1package.json
  • 再次在终端中运行build命令
  • 将新安装程序手动上载到服务器上的同一位置

编辑

我执行了上述三个步骤,另外还上传了新的Latest.yml(版本1.0.1),结果是当我现在在其他PC上运行先前安装的版本(将新版本上传到服务器之前)1.0.0时,它没有检测到我向服务器添加了1.0.1,并且它没有更新或显示任何弹出窗口或其他内容。我做错了什么?

编辑2

我正在尝试自行解决问题,现在我上传了1.0.2,因此现在下载应用程序的链接是:

https://quickmargo.pl/dist/download/quickmargo …

javascript auto-update electron electron-builder

5
推荐指数
1
解决办法
250
查看次数

HEX到HSL转换javascript

您好我正在尝试创建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)

javascript hsl colors string-parsing

3
推荐指数
1
解决办法
6302
查看次数

数组过滤器-摆脱O(n ^ 2)

我需要对非常大(超过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)我想重构,但我不知道如何。

javascript arrays filter

3
推荐指数
1
解决办法
57
查看次数

更改ng-repeat AngularJS中单击元素的工具提示

点击元素后,我正在执行函数,并且在成功之后,我想查看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两种方式,它没有用.

如何仅将新工具提示信息附加到单击元素?

javascript tooltip angularjs angular-ui-bootstrap

1
推荐指数
1
解决办法
146
查看次数