首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Node/Express应用程序中设置JSForce连接中间件的最佳方法

在Node/Express应用程序中设置JSForce连接中间件的最佳方法
EN

Stack Overflow用户
提问于 2017-07-13 11:52:15
回答 1查看 1.5K关注 0票数 0

我有一个简单的节点应用程序,它使用JSForce连接到Salesforce,以推送/查询Salesforce帐户。我使用的是用户名/密码身份验证,而不是OAuth。

它现在运行良好,但仍然在dev中,而且我注意到我的页面加载非常慢,可能是因为在每次加载时,我都要建立一个连接,登录,并通过中间件将连接附加到req。

代码语言:javascript
复制
router.use('/*time*',
  sftools.conn, // Create connection to Salesforce
  sftools.login, // Login to SalesForce
  sftools.picklist //populate res.locals.roles with SalesForce Roles
)

中间件代码示例:

代码语言:javascript
复制
const jsforce = require('jsforce')

exports.conn = (req, res, next) => {
  req.conn = new jsforce.Connection({
    loginUrl: process.env.SF_LOGINURL
  })
  next()
}

exports.login = (req, res, next) => {
  req.conn.login(process.env.SF_USER, process.env.SF_PASS, (err) => {
    if(err) return next(err)
    next()
  })
}

同样,这是可行的,但我认为我应该建立连接和全球登录,我只是不知道如何做到这一点,以及它应该去我的应用程序。即使我这样做了,我还是应该将conn分配给请求,还是直接访问它呢?第一个节点应用..。任何想法都会受到赞赏。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-14 13:28:41

如果您希望您的连接在请求处理之后仍然保持打开状态,则应该将连接处理解压缩到一个专用模块/文件中。

从节点内部调用“require”将始终返回相同的实例:

(...)每个需要(‘foo’)的调用都将得到完全相同的对象返回,如果它将解析到同一个文件。需要(“foo”)的多个调用可能不会导致多次执行模块代码。(...)

请查阅nodejs文档以获得更多信息:

考虑到这一点,您可以创建一个专用的处理程序文件.

代码语言:javascript
复制
// sfConnectionHandler.js
const jsforce = require('jsforce')

let currentConnection

function createConnection() {
    currentConnection = new jsforce.Connection({ loginUrl: process.env.SF_LOGINURL })
    currentConnection.login(process.env.SF_USER, process.env.SF_PASS, (err) => {
        // your error handling
    })
    // use promises, call next(), ...
}

function connection() {
    // assert whatever you feel is necessary (is alive, logged in, ...)
    if(!currentConnection) {
        createConnection();
    }
    return currentConnection;
}

module.exports = connection;

..。然后在任何时候想要使用连接的地方都需要这个文件。

代码语言:javascript
复制
const sfConnectionHandler = require('./sfConnectionHandler');
sfConnectionHandler.connection.query('...');

不能将连接附加到每个请求。我想不出有什么好处,只要没有特殊的联系。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45079825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档