Получить node.js серверный объект, доступный в клиентском коде javascript

#javascript #node.js #uipath

#javascript #node.js #uipath

Вопрос:

Я поиграл с пакетом UiPath Orchestrator. И соединение было установлено с установленным node.js посылка.

В любом случае, теперь мне нужно реализовать его на своем веб-сайте таким образом, чтобы я мог получить к нему доступ с простого html сайта.

Там я немного затрудняюсь с его запуском. Вот как я хотел бы его использовать:

index.html:

 <html>
  ...
  <button onclick="test()">Do something</button>  
  ...
  <script src="scripts.js"></script>
  ...
</html>
  

server.js : (Я начинаю с node server.js )

 var http = require('http'),
    fs = require('fs');
const port = 6543;
const path = require('path');
const server = http.createServer((req, res) => {
  let filePath = path.join(
      __dirname,
      req.url === "/" ? "index.html" : req.url
  );
  let extName = path.extname(filePath);
  let contentType = 'text/html';
  switch (extName) {
      case '.js':
          contentType = 'text/javascript';
          break;
  }
  console.log(`File path: ${filePath}`);
  console.log(`Content-Type: ${contentType}`);
  res.writeHead(200, {'Content-Type': contentType});
  const readStream = fs.createReadStream(filePath);
  readStream.pipe(res);
});
server.listen(port, (err) => {
...
});
  

scripts.js:

 function test() {
  ...
  // get the orch object here without defining it here as it contains credentials
  var orchestratorInstance = new Orchestrator({
    tenancyName: string (optional),
    usernameOrEmailAddress: string (required),
    password: string (required),
    hostname: string (required),
    isSecure: boolean (optional, default=true),
    port: integer (optional, [1..65535], default={443,80} depending on isSecure),
    invalidCertificate: boolean (optional, default=false),
    connectionPool: number (optional, 0=unlimited, default=1)
  });
}
  

Это работает. Итак, запускается тестовая функция.

Но теперь я хотел бы получить Orchestrator объект (как показано здесь https://www.npmjs.com/package/uipath-orchestrator ).

Как это сделать наилучшим образом?

Может быть, просто передать этот объект в сам scripts.js файл? Но как это сделать с window помощью or global и будет ли это правильным решением?

Мне нужен сгенерированный на стороне сервера объект, поскольку он содержит учетные данные, которые могут не быть доставлены на сторону клиента.

Комментарии:

1. Вы можете встроить сгенерированный вашим узлом javascript в файл сценария html.

2. И как это сделать с объектом? Какой-нибудь пример кода?

Ответ №1:

Грубый пример, но дающий представление о встраивании файла сценария в html. В идеале вы должны использовать express для загрузки веб-страницы, но это чисто для описания usecase.

Вы могли бы сделать то же самое с тегом end body или тегом end head .

 const http = require('http'),
const fs = require('fs');

const html = fs.readFileSync('./file.html'); 
const obj = fs.readFileSync('./script.js'); 

const htmlWithScript = html.replace(/</htmls*>/,`<script>${obj}</script></html>`);
// const htmlWithScript = `<html><head><script>${obj}</script></head><body> my html stuff ...</body></html>`

http.createServer(function(request, response) {  
        response.writeHeader(200, {"Content-Type": "text/html"});  
        response.write(htmlWithScript);  
        response.end();  
    }).listen(8000);
  

Комментарии:

1. Это выглядит хорошо, и, возможно, это может сработать. Но я не могу загрузить HTML-файл и передать ему объект. Может быть, вы могли бы расширить пример и показать мне, как это сделать, когда HTML-код находится в отдельном файле?

2. Я получаю сообщение об ошибке. Но в любом случае это вообще не сработает. Вы пытаетесь включить исходный код в HTML. Но, как я уже сказал, script.js файл содержит учетные данные. Это должно выполняться на стороне сервера, а затем объект, если возможно, переходит на сторону клиента. Как это сделать?

3. Это не полное решение, это способ решить проблему встраивания файла сценария в ваш html. Задайте новый вопрос с более подробными требованиями

4. Извините, когда это было недостаточно ясно. Но это требование. Конечно, просто требуется файл, и использовать его легко. Но это просто объект, который возвращается, необходимый по соображениям безопасности. Я обновил вопрос.

5. Глядя на кодовую базу для orchestrator, в частности, это будет работать только в node, поэтому бессмысленно иметь экземпляр локально во встроенном скрипте в html. github.com/UiPath/orchestrator-nodejs/blob/master/lib /. … Для чего вы его используете, чего не может сделать альтернатива? Почему бы не создать аналогичную логику, создающую вашу собственную библиотеку, используя объект xmlhttprequest, выборку или axios на стороне клиента?

Ответ №2:

Он отлично работает вместе с UiPath-Orchestrator nodejs.

Так что просто используйте:

 var util = require('util');
var Orchestrator = require('uipath-orchestrator');
var orchestrator = new Orchestrator({
     tenancyName: 'test',           // The Orchestrator Tenancy
     usernameOrEmailAddress: 'xxx',// The Orchestrator login
     password: 'yyy',               // The Orchestrator password
     hostname: 'host.company.com', // The instance hostname
     isSecure: true,                // optional (defaults to true)
     port: 443, // optional (defaults to 80 or 443 based on isSecure)
     invalidCertificate: false, // optional (defaults to false)
     connectionPool: 5 // options, 0=unlimited (defaults to 1)
});
var apiPath = '/odata/Users';
var apiQuery = {};
orchestrator.get(apiPath, apiQuery, function (err, data) {
    if (err) {
        console.error('Error: '   err);
    }
    console.log('Data: '   util.inspect(data));
});
  

и извлеките orchestrator объект в свой node.js код.

Он также работает вместе с облаком Orchestrator (если у вас нет встроенной версии), смотрите здесь для получения дополнительной информации.