小编TKo*_*KoL的帖子

Axios - 获取带有参数的 url,而不实际发出请求

我的 React 项目中有一些代码,如下所示:

        const url = '/create-label-shipments.json';
        const filters = Object.assign({}, this.state.filters);
        filters.page = this.state.page;
        const response = await axios.get(url, {params: filters});
Run Code Online (Sandbox Code Playgroud)

现在我知道 axios 接受该params对象并使用查询参数创建一个新的 url,例如'/create-label-shipments.json?page=1&date=2020-03-20&etc...'

我希望我能做的是在代码的不同部分调用一些 axios 函数,其功能与上面完全相同,但它不是发出请求并给我响应,而是只给我 URL。

        const url = '/create-label-shipments.csv';
        const filters = Object.assign({}, this.state.filters);
        const url = await axios.getUrl(url, {params: filters});
        // at this point, no request was made, and url === '/create-label-shipments.csv?page=1&date=2020-03-20&etc...'
Run Code Online (Sandbox Code Playgroud)

javascript axios

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

sessionStorage 更改不会触发“存储”事件

我在这里关注这个,看看如果有人打开了多个标签,我是否可以在我网站的所有打开的网页上启用更新。

基本上,我设置了侦听器并检查“购物车”键是否已更改

window.addEventListener('storage', function(e) {
  if (e.key === "cart") {
    console.log(`cart changed: ${e.newValue}`);
  }
});
Run Code Online (Sandbox Code Playgroud)

当我从同一网站上的另一个选项卡更改 localStorage.cart 时,事件在第一个选项卡中触发得很好:

setInterval(function(){
    localStorage.cart = "localStorage 1";
    setTimeout(function(){
        localStorage.cart = "localStorage 2";
    },2000);
},4000);
Run Code Online (Sandbox Code Playgroud)

但是当我使用 sessionStorage 而不是 localStorage 时,它​​不会:

setInterval(function(){
    sessionStorage.cart = "sessionStorage 1";
    setTimeout(function(){
        sessionStorage.cart = "sessionStorage 2";
    },2000);
},4000);
Run Code Online (Sandbox Code Playgroud)

'storage' 事件是否只为 localStorage 而不是 sessionStorage 触发?

仅在 chrome 上测试。

html javascript

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

在 Android 中使用特定于构建的 aaptOptions(用于排除特定资产文件/文件夹)

一直在开发一个Android Webview应用程序,我刚刚开始使用其中的node_modules文件夹,所以很自然地我做了一些关于如何排除它的研究,我最终在这里提出了这个问题

尝试了一些答案,实际上最适合我的是关于 aaptOptions 的答案

当然,我很自然地在尝试它,试图找出有效的方法,并且我成功地从调试 apk 中排除了一些文件夹。

            aaptOptions {
                ignoreAssetsPattern '!node_modules:!jsunmin:!.idea:!jade:!css-scss:'
            }
Run Code Online (Sandbox Code Playgroud)

我确实可以确认这些文件夹不包含在 Android studio 的最终 APK 中!成功!

然后我意识到我可以做一些聪明的事情:当我运行我的应用程序时,在我的端测试它,调试它,我喜欢在某些地方自动放入某些凭据 - 我用 javascript 做到这一点 - 但是显然,我不希望这些凭据包含在我可能发送到世界各地的 APK 中 - 尽管我已经对其进行了编码,除非我正在调试,否则不会自动输入凭据,但凭据实际上仍然在 javascript 文件中,想必有人可以进去看看并看到它们!

所以我的想法是创建一个文件“example-creds.js”,并使用 aaptOptions 不包含该文件,仅在发布版本上,所以我想出了一些看起来大约像这样的东西(删除了额外的细节):

android {
    buildTypes {
        release {
            aaptOptions {
                ignoreAssetsPattern '!node_modules:!jsunmin:!.idea:!jade:!css-scss:!example-creds.js:'
            }
        }

        debug {
            aaptOptions {
                ignoreAssetsPattern '!node_modules:!jsunmin:!.idea:!jade:!css-scss:'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用!我已经测试过它,它似乎可以运行最后定义的 aaptOptions ,无论构建类型如何。如果我将发布放在调试之后,则在任何一个构建中都不会获得示例信用。如果我在发布之后进行调试,我会在两者中获得示例信用。

我怎样才能得到我正在寻找的东西?

android android-gradle-plugin

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

Microsoft SQL Server - “如果存在则更新,或插入”的最佳方式

我一直在四处寻找这个问题的答案,但那里有一些相互矛盾或模棱两可的信息,发现很难找到确定的答案。

我的上下文:我在 node.js 中使用 'mssql' npm 包。我的 SQL 服务器是 Microsoft SQL Server 2014。

我有一条记录,它可能已经存在于表中,也可能不存在——如果存在,我想更新它,否则我想插入它。我不确定最佳 SQL 是什么,或者是否应该在 mssql 中运行某种“事务”。我发现了一些看起来不错的选项,但我不确定其中的任何一个:

选项 1: 如何更新(如果存在或插入)

问题是我什至不确定这是 MSSQL 中的有效语法。不过我确实喜欢它,而且它似乎也支持我喜欢的同时执行多行。

INSERT INTO table (id, user, date, points)
    VALUES (1, 1, '2017-03-03', 25),
           (2, 1, '2017-03-04', 25),
           (3, 2, '2017-03-03', 100),
           (4, 2, '2017-03-04', 150)
    ON DUPLICATE KEY UPDATE points = VALUES(points)
Run Code Online (Sandbox Code Playgroud)

选项 2:

不知道这个有没有问题,只是不确定它是否是最佳的。似乎不支持多个同时行

update test set name='john' where id=3012
IF @@ROWCOUNT=0
   insert into test(name) values('john');
Run Code Online (Sandbox Code Playgroud)

选项 3:合并,https : //dba.stackexchange.com/questions/89696/how-to-insert-or-update-using-single-query

有人说这个有点bug什么的?这显然也支持一次我喜欢的多个。

MERGE dbo.Test WITH …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

6
推荐指数
2
解决办法
2852
查看次数

向OData的Dynamics NAV进行身份验证

我正在尝试编写一个使用Dynamics NAV Odata提要的node.js脚本。

我的Dynamics NAV设置中同时有一个UserAccount / PW和一个Web服务访问密钥。

我一辈子都找不到如何正确验证身份的方法,无论是在标头中添加内容还是在URL查询中添加内容。我尝试使用'username:password @ server'格式。我尝试将其编码为base64并将其添加到“身份验证”值的标题中。

文档本身是非常特定的。我知道如何生成密钥,但是我不知道如何正确地将该密钥发送给NAV进行身份验证。

我正在使用'request-promise'npm软件包,该软件包带有一个'options'参数,可以在其中添加任意的标头key:value对。请有人给我一些有关如何向NAV进行身份验证的指示。我已经花了几个小时了。

web-services node.js dynamics-nav

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

更新 Laravel 模型中的不可填充字段

我有我的 User 表,当你完成所有工作时 laravel 附带的默认表php artisan make:auth,并且我添加了一个布尔system_admin列和其他几个类似的列

现在,当有人注册到该网站时,我不希望恶意者能够授予自己该权利,因此我没有将该字段放入fillableUser.php 模型文件的数组中。

那么第一个问题:这是出于正确原因的正确决定吗?

但现在我正在开发一个系统管理页面,它应该允许人们修改类似的属性,但在我的路线中,只能由系统管理员访问,我的代码如下所示:

public function updateUser($userId, Request $request) {
        $user = User::find($userId);
        $update = $request->all();
        $user->update($update);
Run Code Online (Sandbox Code Playgroud)

当然,因为这些列不是fillable,所以此请求不适用于这些字段。

但我想要它,因为这个特定的路由受到中间件的保护,该中间件验证 system_admin 是否应该有权访问它。

那么,如何更新这些不可填写的列,而又不允许非系统管理员更新相同的列呢?

php laravel eloquent

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

Laravel 作业队列调度现在不会像往常一样失败

我有一份工作是为了测试失败是如何工作的:

<?php

namespace App\Jobs;

use App\ApiUser;
use App\Helpers\Helper;
use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class FakeJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    private $apiUser;

    public function __construct(ApiUser $apiUser) {
        $this->apiUser = $apiUser;
    }

    public function handle() {
        throw new Exception('time is even');
    }

    public function failed(Exception $exception) {
        // Send user notification of failure, etc...
        $path = storage_path('logs/s3_logs/FakeJob_failed_' . Helper::generateRandomString(5) . '.txt');
        file_put_contents($path, $exception->getMessage());
    }
}
Run Code Online (Sandbox Code Playgroud)

当我正常调度时,它会转到failed函数并完全按预期写入文件。

但是,当我这样做时FakeJob::dispatchNow($apiUser);,它根本不会这样做...... …

php queue laravel

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

完成后,是否需要终止/关闭/删除网络工作者?

我有一个使用网络工作者清理indexedDB数据库的应用程序。我已经设置好它,因此可以从全局函数调用中启动它,如果该函数在完成之前再次被调用,它不会重新启动,但是如果函数完成后被调用,它会通过创建一个新实例而重新启动。工人。这一切对我来说都很好。

完成工作后,我是否需要从某种意义上删除,销毁或终止工作程序的旧实例?

javascript html5 web-worker

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

使用 Guzzle 在 Laravel 中创建代理

我需要在我的网站前端使用 api,但我不想将该 api 的密钥暴露给我的前端用户,所以我决定创建一个代理。然而,我认为我不一定以最干净、最直接、最像 Laravel 或 Guzzle 的方式完成它。我来展示一下我的作品:

在 web.php 中,我添加了一条如下所示的路由:Route::post('/address-api/{path?}', 'Controller@addressApi')->where('path', '.*');这样,之后的整个路径/address-api都会传递到我的控制器,因此我可以假设将任何 post 请求代理到该 api。

然后Controller.php我做了这个:

public function addressApi($path, Request $request)
{
    if (!Str::startsWith($path, '/')) $path = '/' . $path; // make sure it starts with /
    $url = 'https://api.craftyclicks.co.uk/address/1.1' . $path;
    $postData = $request->all();
    $postData['key'] = env('CRAFTYCLICKS_KEY');

    $client = new Client();
    $response = $client->request('POST', $url, [
        'json' => $postData
    ]);

    return response()->json(json_decode($response->getBody(), true));
}
Run Code Online (Sandbox Code Playgroud)

因此,无论他们发布到我的 api 的 json 是什么,我都会发布到 CraftyClicks api,但我将我们的密钥添加到 json …

php laravel guzzle

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