Ошибка типа [ERR_UNESCAPED_CHARACTERS] Путь запроса содержит символы без экранирования - PullRequest
0 голосов
/ 03 января 2019

Я работаю в Ubuntu с входящим HTTP-запросом с этим URL: http://myIp:3000/v1/projects/list

И я получаю эту ошибку в терминале:

TypeError [ERR_UNESCAPED_CHARACTERS]: Request path contains unescaped characters
at new ClientRequest (_http_client.js:127:13)
at Object.request (https.js:300:10)
at Request.start (/home/dev/grem-api-dev/apiv3/node_modules/request/request.js:751:32)
at Request.end (/home/dev/grem-api-dev/apiv3/node_modules/request/request.js:1512:10)
at end (/home/dev/grem-api-dev/apiv3/node_modules/request/request.js:564:14)
at Immediate._onImmediate (/home/dev/grem-api-dev/apiv3/node_modules/request/request.js:578:7)
at processImmediate(timers.js:632:19)

После этой ошибки узел процесса исчезает из терминала (но все еще работает, и ответ API отправляется правильно), хотя я не вижу его работы ( изображение прилагается ). Таким образом, единственный способ взаимодействия с процессом узла - сделать что-то вроде ps aux | grep node или ps T и вручную убить процесс.

Предполагая, что ошибка означает, что я нашел соответствующий фрагмент кода, где появляется ошибка (request.js: 751: 32). Вот оно:

  try {
    self.req = self.httpModule.request(reqOptions)
  } catch (err) {
    self.emit('error', err)
    return
  }

Единственное решение, к которому я пришел, это прокомментировать self.emit('error', err) строку кода, что, очевидно, далеко от лучших практик.

Дело в том, что тот же код работает на других компьютерах (Ubuntu, Windows) с одинаковыми версиями компонентов, и ошибки не возникает. Также конечные точки API, такие как http://myIp:3000/v1/community/list, отлично работают на всех устройствах.

Вот мои версии компонентов: нпм - 6,5,0, узел - 11.4.0, запрос - 2.88.0, Ubuntu - 16.04 (Windows - 10)

при необходимости некоторые фрагменты кода (создание Express Server и конкретный маршрут в ProjectsController):

const app = express();
app.use('/v1/projects/', ProjectsController);

const router = express.Router();
router.post('/list', function(req,res){
   //logic
});

1 Ответ

0 голосов
/ 05 января 2019

Решением этой проблемы был поиск фрагмента кода, который отправлял запрос на другой веб-ресурс с URL-адресом, содержащим неэкранированные символы, а затем заменял их в соответствии с этой статьей https://www.w3schools.com/tags/ref_urlencode.asp. Этот фрагмент был выполнен по условию, поэтому только 1 сервер с определенной ОС прошел через оператор if / else.

const request = require('request');

if (...) {}
else {
    request.get(...) //source of error
    .on('response', function(response) {
        //logic
    });
}
...