How to renew a session of salesforce using jsforce?

I am using jsforce node module for doing CRUD operation in salesforce.

For making a connection to salesforce, I have following input

username, password, securityToken and loginUrl.

Here's how I make a connection first time.

var conn = new jsforce.Connection({
            loginUrl: connectionDetails.salesforce.loginUrl
        });

        conn.login(connectionDetails.salesforce.username,
            connectionDetails.salesforce.password + connectionDetails.salesforce.securityToken,
            function(err, userInfo) {
                if (!err) {
                    console.log('User with user id ' + userInfo.id + ' successfully logged into Salesforce');
                    successCb(conn.accessToken, conn.instanceUrl);
                } else {
                    console.log('Login failed to https://test.salesforce.com/');
                    errorCb('Login failed to https://test.salesforce.com/');
                }
            });

I store the accessToken and Instanceurl in the req object provided by Express.

After that any CRUD operation I perform like below

 var salesConn = new jsforce.Connection({
            accessToken: salesforceAccessToken,
            instanceUrl: salesforceInstanceUrl
        });

salesConn.sobject('Lead').retrieve(someLeadID, function(err, data) {
    ...
});

Now suppose I keep my server idle for few hours or may be even a day, then if I do a CRUD operation then the call fails. This I am pretty sure that the session has expired.

Now I have two queries

  1. Is the above correct way of making connection to salesforce using the input connection details I have?
  2. How can I know that the session has expired and make a new session?

PS I tried to look into the Access Token with Refresh Token, but that is only available with OAuth2 authorization code flow.

A little late, but I had the same issue today and I fixed it by calling conn.login(username, password+token) whenever I get an invalid session error.

I am doing something different though, I'm not creating a second variable to use with my SF calls, but instead use the original conn variable, conn.sobject(...).

It would refresh token automatically. my jsforce version is "jsforce": "^1.4.1"

jsforce has a _refreshDelegate

Connection.prototype.login = function(username, password, callback) {
 // register refreshDelegate for session expiration
 this._refreshDelegate = new HttpApi.SessionRefreshDelegate(this, createUsernamePasswordRefreshFn(username, password));
  if (this.oauth2 && this.oauth2.clientId && this.oauth2.clientSecret) {
   return this.loginByOAuth2(username, password, callback);
  } else {
    return this.loginBySoap(username, password, callback);
 }
};