# LeanEngine Node SDK
express
```javascript
var app = require('express')();
var AV = require('leanengine');
AV.init({
appId: process.env.LEANCLOUD_APP_ID,
appKey: process.env.LEANCLOUD_APP_KEY,
masterKey: process.env.LEANCLOUD_APP_MASTER_KEY
hookKey: process.env.LEANCLOUD_APP_HOOK_KEY
});
app.use(AV.express());
app.listen(process.env.LEANCLOUD_APP_PORT);
```
##
Node SDK expresskoakoa2 3
```javascript
AV.express(options?: object)
AV.koa(options?: object)
AV.koa2(options?: object)
```
`options`
- `onError?: function(err: Error)` Hook
- `ignoreInvalidSessionToken?: boolean` sessionToken`X-LC-Session` 401 `{"code": 211, "error": "Verify sessionToken failed, maybe login expired: ..."}`
## AV.Object
* `AV.Object#disableBeforeHook()`
* `AV.Object#disableAfterHook()`
LeanEngine SDK AVObject AVObject Hook masterKey [](https://leancloud.cn/docs/leanengine_cloudfunction_guide-node.html#)
## AV.Cloud
### AV.Cloud.define
```javascript
AV.Cloud.define(name: string, func: function)
AV.Cloud.define(name: string, options: object, func: function)
```
`options` `func` Request Promise Promise Promise `AV.Cloud.Error`
`options`
* `fetchUser: boolean` `true` `false` `request` user
* `internal: boolean` `AV.Cloud.run` `remote` masterKey `AV.Cloud.run` `useMasterKey` `false`
`Request`
* `params: object` `rpc` `AV.Object`.
* `currentUser?: AV.User` `X-LC-Session`
* `user?: AV.User` `currentUser`.
* `meta: {remoteAddress}``meta.remoteAddress` IP.
* `sessionToken?: string` sessionToken`X-LC-Session`
1.x before Hook `request` `response`** Promise **
### AV.Cloud.Error
```javascript
new AV.Cloud.Error(message: string, options?)
```
`Error` Class Hook
- `status?: number` HTTP 400
- `code?: number` 1
### AV.Cloud.run
JavaScript SDK HTTP
```javascript
AV.Cloud.run(name: string, params: object, options?: object): Promise
```
`options`
* `user?: AV.User` `remote: false`
* `sessionToken?: string` sessionToken `remote: true`
* `remote?: boolean` `false`.
* `req?`: `http.ClientRequest` Express Request remoteAddress
[](https://leancloud.cn/docs/leanengine_cloudfunction_guide-node.html#)
### AV.Cloud.rpc
JavaScript SDK `AV.Cloud.run`
### AV.Cloud.enqueue
```javascript
AV.Cloud.enqueue(name: string, params: object, options?: object): Promise
```
`options`
- `attempts?: number` `1`
- `backoff?: number` `60000`
- `delay?: number`
- `deliveryMode?: string` `atLeastOnce``atMostOnce` `atLeastOnce`
- `keepResult?: number` `300000`
- `priority?: number`
- `timeout?: number` `15000` `15000`
- `uniqueId?: string` ID 32 UUID
### AV.Cloud.getTaskInfo
```javascript
AV.Cloud.getTaskInfo(uniqueId: string): Promise
```
`TaskInfo`
- `uniqueId: string` ID
- `status: string` `queued``success``failed`
`TaskInfo`
- `finishedAt?: string`
- `statusCode?: number` HTTP
- `result?: object`
`TaskInfo`
- `error?: string`
- `retryAt?: string`
### Class Hook
* `AV.Cloud.beforeSave`
* `AV.Cloud.afterSave`
* `AV.Cloud.beforeUpdate`
* `AV.Cloud.afterUpdate`
* `AV.Cloud.beforeDelete`
* `AV.Cloud.afterDelete`
`function(className: string, func: function)` `func` Request Promise before Hook `AV.Cloud.Error` 500
`Request`
* `object: AV.Object`
* `currentUser?: AV.User`
* `user?: AV.User` `currentUser`.
LeanEngine Hook Hook LeanCloud
Hook [Hook ](https://leancloud.cn/docs/leanengine_cloudfunction_guide-node.html#Hook_)
### Hook
* `AV.Cloud.onVerified`
* `AV.Cloud.onLogin`
`function(func: function)` `func` Request Promise
`Request`
* `currentUser: AV.User`
* `user: AV.User` `currentUser`.
* `object: AV.User` `currentUser` hook
* `authData: {[provider: string]: any}` `onAuthData`
#### `AV.Cloud.onAuthData`
`function(func: function)` `func` Request authData
`Request`
* `authData: {[provider: string]: any}`
### Hook
* `AV.Cloud.onIMMessageReceived`
* `AV.Cloud.onIMReceiversOffline`
* `AV.Cloud.onIMMessageSent`
* `AV.Cloud.onIMMessageUpdate`
* `AV.Cloud.onIMConversationStart`
* `AV.Cloud.onIMConversationStarted`
* `AV.Cloud.onIMConversationAdd`
* `AV.Cloud.onIMConversationAdded`
* `AV.Cloud.onIMConversationRemove`
* `AV.Cloud.onIMConversationRemoved`
* `AV.Cloud.onIMConversationUpdate`
* `AV.Cloud.onIMClientOnline`
* `AV.Cloud.onIMClientOffline`
* `AV.Cloud.onIMClientSign`
LeanEngine Hook Hook LeanCloud
Hook `function(func: function)` `func` Request Promise [ Hook](https://leancloud.cn/docs/realtime_v2.html#_Hook)
###
`AV.Cloud.start()` AV LeanEngine `LEANCLOUD_APP_ID`
`AV.Cloud.stop()`
## Middlewares
Node SDK express
```javascript
app.use(AV.Cloud.LeanCloudHeaders({framework: 'express'}));
app.use(AV.Cloud.LeanCloudHeaders({framework: 'koa'}));
app.use(AV.Cloud.LeanCloudHeaders({framework: 'koa2'}));
```
### leancloud-headers
`X-LC` request.AV Express
```javascript
app.use(AV.Cloud.LeanCloudHeaders());
```
express `Request` koa `ctx`
* `AV.id?`App ID
* `AV.key?`App Key
* `AV.masterKey?`App Master Key
* `AV.prod``0` `1`
* `AV.sessionToken?`Session Token
### cookie-session
Express Koa Express
```javascript
app.use(AV.Cloud.CookieSession({secret: 'my secret', maxAge: 3600000, fetchUser: true}));
```
* `secret: string` Cookie
* `name?: string`Cookie `avos.sess`
* `maxAge?: number`Cookie
* `fetchUser?: boolean` `false` `id` `sessionToken`.
* `httpOnly?: boolean`: Cookie `false`.
express `Request` koa `ctx`
* `currentUser?: AV.User` Cookie `cookie-session` `fetchUser` `id` `sessionToken`.
* `sessionToken?: string` `sessionToken` Cookie
express `Response` koa `ctx`
* `saveCurrentUser(user: AV.User)` Cookie
* `clearCurrentUser()` Cookie
express [](https://leancloud.cn/docs/leanengine_webhosting_guide-node.html#)
### https-redirect
HTTP HTTPS Express
```javascript
app.enable('trust proxy');
app.use(AV.Cloud.HttpsRedirect());
```
Koa
```javascript
app.proxy = true;
app.use(AV.Cloud.HttpsRedirect({framework: 'koa'}));
```