Heroku学习 - 利用Heroku app实现 OrgA 查询Org B 的数据数据

最近研究了一番如何通过Heroku应用对OrgA开放一个接口,参数传递的是一个SQL,APP的负责将SQL通过callout的形式调用目标OrgB Rest API来获取数据并返回给OrgA。我是用的是nforce,express实现的,还有一种方式可以用jsforce,但我这条路没有走通,卡在总是提示我以下错误,问题是jsforce依赖包中hardcode的路径,而实际上core-js依赖包中并不存在,导致不兼容,我暂时无法解决,如果有方法,请不吝赐教。

Error: Cannot find module 'core-js/modules/es6.array.for-each'
2020-01-07T03:23:04.257723+00:00 app[web.1]: Require stack:
2020-01-07T03:23:04.257725+00:00 app[web.1]: - /app/node_modules/jsforce/lib/index.js
2020-01-07T03:23:04.257727+00:00 app[web.1]: - /app/node_modules/jsforce/index.js
2020-01-07T03:23:04.257729+00:00 app[web.1]: - /app/server.js

 

0. 此时先在Salesforce中创建一个Connected App, 并记录下ClientID和ClientSecret值,不加赘述。

 

接下来首先需要先安装Heroku CLI 和 Git。

1. 可以选择安装Githug Desk 并选项安装工具Windows PowerShell GitHub Desktop website 或者 

安装Git Bash https://devcenter.heroku.com/articles/git

https://git-scm.com/download/win。打开控制台

2. 安装Heroku CLI

npm install -g heroku

3. 创建新项目

ng new [新项目名]

4. 进入新项目

cd [新项目]

5. 登录Heroku

heroku login

6. 输入Heroku用户名和密码登录成功。

7. 创建Heroku App, 系统会为app随机生成一个标识。

heroku create
Creating app... done, ⬢ tranquil-shore-75468
https://tranquil-shore-75468.herokuapp.com/ | https://git.heroku.com/tranquil-shore-75468.git

8. 创建server.js

touch server.js

9. 修改server.js

var express = require('express');
var bodyParser = require('body-parser');
var nforce = require('nforce');
var app = express();
app.use(express.static(__dirname + "/public")); 
app.use(bodyParser.json());


  app.use(express.json()); // to support JSON-encoded bodies
  app.use(express.urlencoded()); // to support URL-encoded bodies


//nforce setup to connect Salesforce var org = nforce.createConnection({ clientId: '[Client Key of Connected APP]', clientSecret: '[Client Secret of Connected APP]', redirectUri: 'https://localhost:3030/oauth/_callback', //apiVersion: 'v37.0', // optional, defaults to current salesforce API version environment: 'production', // optional, salesforce 'sandbox' or 'production', production default mode: 'single' // optional, 'single' or 'multi' user mode, multi default }); // Initialize the app. var server = app.listen(process.env.PORT || 8080, function () { var port = server.address().port; console.log("App now running on port", port); }); // LEAD API ROUTES BELOW // Generic error handler used by all endpoints. function handleError(res, reason, message, code) { console.log("ERROR: " + reason); res.status(code || 500).json({"error": message}); } //, securityToken is required if IP Range is not set in profile app.get("/queryList", function(req, res) { org.authenticate({ username: '*********', password:'**********',grant_type:'password'}, function(err, oauth){ if(err) { console.log('Error: ' + err.message); } else {
    var sqlStr = req.body.sql;// use req.body 获取参数 console.log(
'Access Token: ' + oauth.access_token); org.query({query:"select id from lead"}, function (err, resp) { if(err) throw err; if(resp.records && resp.records.length){ res.send(resp.records); } }); } }); }); app.listen(app.get('port'), function () { console.log('Express server listening on port ' + app.get('port')); });

注意到这个文件头有以下几个引用包,所以不难理解我们接下来需要安装其对应的包。

var express = require('express');
var bodyParser = require('body-parser');
var nforce = require('nforce');

10. 安装依赖包, --save可以将依赖包自动保存在package.json文件中。

npm install express body-parser nforce –-save

11.Git部署

git init
heroku git:remote -a [App表示名]
git add .
git commit -m '[添加注释文字]'
git push heroku master

 

12. 测试

在Postman中测试模拟调用[appname].herokuapp.com/queryListWithAllConditions,查看结果。

Heroku学习 - 利用Heroku app实现 OrgA 查询Org B 的数据数据_第1张图片

 

 

 到这里其实有个问题,就是安全性问题,需要测试,后续再更新。

 

你可能感兴趣的:(Heroku学习 - 利用Heroku app实现 OrgA 查询Org B 的数据数据)