获取客户端 javascript 代码中可用的 node.js 服务器端对象
Get node.js server-side object available in client-side javascript code
我玩过UiPath Orchestrator package。连接已安装 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
或 global
做到这一点,这是一个合适的解决方案吗?
我需要服务器端生成的对象,因为它包含可能无法传送到客户端的凭据。
一个粗略的例子,但为了给出一个想法,将脚本文件嵌入 html。
理想情况下,您会使用 express 加载网页,但这纯粹是为了描述用例。
您可以对结束主体标签或结束头部标签执行相同的操作。
const http = require('http'),
const fs = require('fs');
const html = fs.readFileSync('./file.html');
const obj = fs.readFileSync('./script.js');
const htmlWithScript = html.replace(/\<\/html\s*\>/,`<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);
它与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 Cloud 一起使用(如果您没有本地部署),请参阅 here 了解更多信息。
我玩过UiPath Orchestrator package。连接已安装 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
或 global
做到这一点,这是一个合适的解决方案吗?
我需要服务器端生成的对象,因为它包含可能无法传送到客户端的凭据。
一个粗略的例子,但为了给出一个想法,将脚本文件嵌入 html。 理想情况下,您会使用 express 加载网页,但这纯粹是为了描述用例。
您可以对结束主体标签或结束头部标签执行相同的操作。
const http = require('http'),
const fs = require('fs');
const html = fs.readFileSync('./file.html');
const obj = fs.readFileSync('./script.js');
const htmlWithScript = html.replace(/\<\/html\s*\>/,`<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);
它与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 Cloud 一起使用(如果您没有本地部署),请参阅 here 了解更多信息。