Проблемы с использованием dtrace для приложения узла, которое включает и запрос, и запрос-обещание-нативный - PullRequest
0 голосов
/ 07 ноября 2018

Я использую узел v6.14.4 в Mac OS (V 10.13.6, Darwin Kernel Version 17.7.0)

Я пытался использовать dtrace, чтобы увидеть, какие файлы открываются при запуске моего скрипта. Я обнаружил, что мой код узла, который открывает файл с помощью метода fs.readAsync (), не виден dtrace, если мне требуются модули request и requestPromise. Это верно, даже если я не использую какие-либо функции в этих модулях. Если я включу только одну или другую, то dtrace покажет вызов fs.readAsync (как системный вызов os open ()).

Моя версия модулей запроса:

"request": "^2.88.0",
"request-promise-native": "^1.0.5"

Моя тестовая программа довольно проста:

// ------------------------------------------
const request = require('request-promise-native');
const request2 = require('request');

var fs = require('fs')

const myFile='./cacert.pem'


fileContent = fs.readFileSync(myFile);

//-------------------------------------

Кто-нибудь знает, что может вызвать такое поведение? Мне не нужно включать оба модуля, и я столкнулся с этим только по ошибке, но я хочу понять, что может привести к тому, что dtrace / dtruss не будет работать, поэтому я мог избежать этого в прошлом.

В качестве примечания я использовал dtrace, чтобы увидеть, какие файлы сертификатов CA этот узел может открывать по умолчанию, когда я использую модуль запроса. Я читал, что в более ранних версиях Node был жестко запрограммирован список сертификатов CA, и я хотел узнать, использует ли моя версия файл или местоположение по умолчанию для поиска сертификатов. После того, как я включил только модуль запроса и предположительно вижу все вызовы open (), похоже, что узел / запрос не открывает файл по умолчанию и поэтому все еще использует встроенные сертификаты CA. Дальнейшая поддержка этого (без рассмотрения самого кода) заключается в том, что при запуске «strings -a» с исполняемым файлом узла отображается 143 вхождения:

-----BEGIN CERTIFICATE-----

указывает на наличие сертификатов, встроенных в двоичный файл.

Я знаю, что могу переопределить это поведение и указать CAFile в параметрах агента при выполнении запроса запроса или установить этот файл в глобальном агенте так, чтобы все вызовы запроса / https использовали это.

Некоторое время я был в замешательстве, потому что у NPM есть файл .npmrc по умолчанию, который принимает такие параметры, как cafile, для управления этим. Однако потом я понял, что это относится только к npm, а не к моим приложениям для узлов.

Заранее спасибо за любые мысли.

...