Socket
Socket
Sign inDemoInstall

@alipay/faas-server-sdk

Package Overview
Dependencies
Maintainers
2
Versions
137
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@alipay/faas-server-sdk - npm Package Compare versions

Comparing version 0.0.21 to 0.0.22

lib/MySQL.d.ts

2

lib/callFunction.js

@@ -1,1 +0,1 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.callFunction=void 0;const errors_1=require("./errors"),middlewares_1=require("./requester/middlewares");async function callFunction(t,r){if(!r.name)throw errors_1.errors.INVALID_PARAM("name","\u51FD\u6570\u540D\u4E0D\u80FD\u4E3A\u7A7A");const n="POST",s=buildUrl(t),u={"x-to-function-name":r.name},e=await middlewares_1.HttpRequester.function.request(n,s,r.data,u,{cloudConfig:t});return e.succeed?{requestId:e.requestId,requestID:e.requestId,result:e.data}:{requestId:e.requestId,requestID:e.requestId,errMsg:e.errMsg}}exports.callFunction=callFunction;function buildUrl(t){return`http://${t.functionGatewayVip}/functions/invokeFunction`}
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.callFunction=void 0;const errors_1=require("./errors"),middlewares_1=require("./requester/middlewares");async function callFunction(t,r){if(!r.name)throw errors_1.errors.INVALID_PARAM("name","\u51FD\u6570\u540D\u4E0D\u80FD\u4E3A\u7A7A");const n="POST",o=buildUrl(t),s={"x-to-function-name":r.name},e=await middlewares_1.HttpRequester.function.request(n,o,r.data,s,{cloudConfig:t});if(e.succeed)return{requestId:e.requestId,requestID:e.requestId,result:e.data};throw errors_1.errors.CALL_FUNCTION_ERR(e)}exports.callFunction=callFunction;function buildUrl(t){return`http://${t.functionGatewayVip}/functions/invokeFunction`}

@@ -1,6 +0,8 @@

import { AlipayContext, CallFunctionParam, CloudConfig } from './types';
import type { AlipayContext, CallFunctionParam } from './types';
import { Database } from './Database';
import { MySQL } from './MySQL';
export declare class Cloud {
#private;
constructor();
refreshConfig(): void;
init(config?: CloudInitOptions): void;

@@ -10,5 +12,6 @@ getAlipayContext(): AlipayContext;

database(): Database;
mysql(): MySQL;
}
export type CloudInitOptions = Partial<Omit<CloudConfig, 'fromEnvId' | 'toEnvId'> & {
env: string | {
export type CloudInitOptions = {
env?: string | {
database?: string;

@@ -18,11 +21,4 @@ functions?: string;

};
envId: string;
envId?: string;
traceUser?: boolean;
database: {
realtime: {
maxReconnect: number;
reconnectInterval: number;
totalConnectionTimeout: number;
};
};
}>;
};

@@ -1,1 +0,1 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Cloud=void 0;const callFunction_1=require("./callFunction"),Database_1=require("./Database"),utils_1=require("./utils");class Cloud{#t;#e;constructor(){this.#t={secretId:process.env.RUNTIME_ACCESS_KEY,secretKey:process.env.RUNTIME_SECRET_KEY,fromEnvId:process.env.RUNTIME_ENV_ID,toEnvId:process.env.RUNTIME_ENV_ID,functionName:process.env.RUNTIME_FUNCTION_NAME,functionGatewayVip:process.env.RUNTIME_FUNCTION_GATEWAY_VIP,functionInstanceId:process.env.RUNTIME_FUNCTION_INSTANCE_ID,functionDatabaseEndpoint:process.env.RUNTIME_MONGO_CLUSTER_ENDPOINT,functionDatabaseName:process.env.RUNTIME_MONGO_DATABASE_NAME}}init(t){this.#t.functionInstanceId||(t?.secretId&&(this.#t.secretId=t.secretId),t?.secretKey&&(this.#t.secretKey=t.secretKey),t?.envId&&(this.#t.toEnvId=t.envId),t?.functionName&&(this.#t.functionName=t.functionName),t?.functionGatewayVip&&(this.#t.functionGatewayVip=t.functionGatewayVip),t?.functionInstanceId&&(this.#t.functionInstanceId=t.functionInstanceId),t?.functionDatabaseEndpoint&&(this.#t.functionDatabaseEndpoint=t.functionDatabaseEndpoint),t?.functionDatabaseName&&(this.#t.functionDatabaseName=t.functionDatabaseName))}getAlipayContext(){return(0,utils_1.getAlipayContext)()}async callFunction(t){return await(0,callFunction_1.callFunction)(this.#t,t)}database(){return this.#e||(this.#e=new Database_1.Database(this.#t)),this.#e}}exports.Cloud=Cloud;
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Cloud=void 0;const callFunction_1=require("./callFunction"),Database_1=require("./Database"),MySQL_1=require("./MySQL"),utils_1=require("./utils");class Cloud{#e;#s;#t;constructor(){this.refreshConfig()}refreshConfig(){this.#e?(process.env.RUNTIME_ACCESS_KEY&&(this.#e.secretId=process.env.RUNTIME_ACCESS_KEY),process.env.RUNTIME_SECRET_KEY&&(this.#e.secretKey=process.env.RUNTIME_SECRET_KEY),process.env.RUNTIME_ENV_ID&&(this.#e.fromEnvId=process.env.RUNTIME_ENV_ID,this.#e.toEnvId||(this.#e.toEnvId=process.env.RUNTIME_ENV_ID)),process.env.RUNTIME_FUNCTION_NAME&&(this.#e.functionName=process.env.RUNTIME_FUNCTION_NAME),process.env.RUNTIME_FUNCTION_GATEWAY_VIP&&(this.#e.functionGatewayVip=process.env.RUNTIME_FUNCTION_GATEWAY_VIP),process.env.RUNTIME_FUNCTION_INSTANCE_ID&&(this.#e.functionInstanceId=process.env.RUNTIME_FUNCTION_INSTANCE_ID),process.env.RUNTIME_MONGO_CLUSTER_ENDPOINT&&(this.#e.functionDatabaseEndpoint=process.env.RUNTIME_MONGO_CLUSTER_ENDPOINT),process.env.RUNTIME_MONGO_DATABASE_NAME&&(this.#e.functionDatabaseName=process.env.RUNTIME_MONGO_DATABASE_NAME)):this.#e={secretId:process.env.RUNTIME_ACCESS_KEY||"",secretKey:process.env.RUNTIME_SECRET_KEY||"",fromEnvId:process.env.RUNTIME_ENV_ID||"",toEnvId:process.env.RUNTIME_ENV_ID||"",functionName:process.env.RUNTIME_FUNCTION_NAME||"",functionGatewayVip:process.env.RUNTIME_FUNCTION_GATEWAY_VIP||"",functionInstanceId:process.env.RUNTIME_FUNCTION_INSTANCE_ID||"",functionDatabaseEndpoint:process.env.RUNTIME_MONGO_CLUSTER_ENDPOINT||"",functionDatabaseName:process.env.RUNTIME_MONGO_DATABASE_NAME||""}}init(e){e?.env&&typeof e?.env=="string"&&(this.#e.toEnvId=e.env),e?.envId&&(this.#e.toEnvId=e.envId)}getAlipayContext(){return(0,utils_1.getAlipayContext)()}async callFunction(e){return await(0,callFunction_1.callFunction)(this.#e,e)}database(){return this.#s||(this.#s=new Database_1.Database(this.#e)),this.#s}mysql(){return this.#t||(this.#t=new MySQL_1.MySQL(this.#e)),this.#t}}exports.Cloud=Cloud;

@@ -1,1 +0,1 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Document=void 0;const errors_1=require("../errors"),middlewares_1=require("../requester/middlewares");class Document{#t;#e;#r;constructor(s,e,t){this.#t=t,this.#r=s,this.#e=e}async update(s){const e="POST",t=`${this.#s()}?update`,r={$match:{_id:this.#e},$update:s},o=await middlewares_1.HttpRequester.database.request(e,t,r,{},{cloudConfig:this.#t});if(!o.succeed)throw errors_1.errors.SYS_ERR(o.errMsg);return o.data}async remove(){const s="DELETE",e=this.#o(),t=await middlewares_1.HttpRequester.database.request(s,e,{},{},{cloudConfig:this.#t});if(!t.succeed)throw errors_1.errors.SYS_ERR(t.errMsg);return t.data}async get(){const s="POST",e=`${this.#s()}?query`;console.log("url",e);const t={$match:{_id:this.#e}},r=await middlewares_1.HttpRequester.database.request(s,e,t,{},{cloudConfig:this.#t});if(!r.succeed)throw errors_1.errors.SYS_ERR(r.errMsg);return r.data}#s(){return`${this.#t.functionDatabaseEndpoint}/${this.#t.functionDatabaseName||"faas"}/${this.#r}`}#o(){return`${this.#s()}?_id=${this.#e}`}}exports.Document=Document;
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Document=void 0;const errors_1=require("../errors"),middlewares_1=require("../requester/middlewares");class Document{#t;#e;#r;constructor(e,s,r){this.#t=r,this.#r=e,this.#e=s}async update(e){const s="POST",r=`${this.#s()}?update`,t={$match:{_id:this.#e},$update:e},o=await middlewares_1.HttpRequester.database.request(s,r,t,{},{cloudConfig:this.#t});if(!o.succeed)throw errors_1.errors.SYS_ERR(o.errMsg);return o.data}async remove(){const e="POST",s=`${this.#s()}?delete`,r={$match:{_id:this.#e},$limit:1},t=await middlewares_1.HttpRequester.database.request(e,s,r,{},{cloudConfig:this.#t});if(!t.succeed)throw errors_1.errors.SYS_ERR(t.errMsg);return t.data}async get(){const e="POST",s=`${this.#s()}?query`,r={$match:{_id:this.#e}},t=await middlewares_1.HttpRequester.database.request(e,s,r,{},{cloudConfig:this.#t});if(!t.succeed)throw errors_1.errors.SYS_ERR(t.errMsg);const o=t.data[0];if(!o)throw errors_1.errors.NOT_FOUND(`document with _id ${this.#e} does not exist`);return o}#s(){return`${this.#t.functionDatabaseEndpoint}/${this.#t.functionDatabaseName||"faas"}/${this.#r}`}}exports.Document=Document;

@@ -0,7 +1,14 @@

import { HttpRequestFailedResult } from './types';
export declare enum ErrorCode {
INVALID_PARAM = "INVALID_PARAM",
SYS_ERR = "SYS_ERR"
CALL_FUNCTION_ERR = "CALL_FUNCTION_ERR",
SYS_ERR = "SYS_ERR",
NOT_FOUND = "NOT_FOUND"
}
export declare class FunctionError extends Error {
code: ErrorCode;
requestId: string;
get requestID(): string;
errCode: number;
errMsg: string;
static create(code: ErrorCode, message: string, ...args: any[]): FunctionError;

@@ -11,3 +18,5 @@ }

INVALID_PARAM(paramName: string, message: string): FunctionError;
CALL_FUNCTION_ERR(result: HttpRequestFailedResult): FunctionError;
SYS_ERR(message?: string): FunctionError;
NOT_FOUND(message: any): FunctionError;
};

@@ -1,1 +0,1 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.errors=exports.FunctionError=exports.ErrorCode=void 0;const node_util_1=require("node:util");var ErrorCode;(function(r){r.INVALID_PARAM="INVALID_PARAM",r.SYS_ERR="SYS_ERR"})(ErrorCode=exports.ErrorCode||(exports.ErrorCode={}));class FunctionError extends Error{code;static create(e,t,...s){const o=new FunctionError((0,node_util_1.format)(t,...s));return o.code=e,o}}exports.FunctionError=FunctionError,exports.errors={INVALID_PARAM(r,e){return FunctionError.create(ErrorCode.INVALID_PARAM,`${r} \u53C2\u6570\u9519\u8BEF\uFF0C${e}`)},SYS_ERR(r="\u5185\u90E8\u7CFB\u7EDF\u9519\u8BEF"){return FunctionError.create(ErrorCode.SYS_ERR,r)}};
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.errors=exports.FunctionError=exports.ErrorCode=void 0;const node_util_1=require("node:util");var ErrorCode;(function(r){r.INVALID_PARAM="INVALID_PARAM",r.CALL_FUNCTION_ERR="CALL_FUNCTION_ERR",r.SYS_ERR="SYS_ERR",r.NOT_FOUND="NOT_FOUND"})(ErrorCode=exports.ErrorCode||(exports.ErrorCode={}));class FunctionError extends Error{code;requestId;get requestID(){return this.requestId}errCode;errMsg;static create(e,o,...s){const t=new FunctionError((0,node_util_1.format)(o,...s));return t.code=e,t}}exports.FunctionError=FunctionError,exports.errors={INVALID_PARAM(r,e){return FunctionError.create(ErrorCode.INVALID_PARAM,`${r} \u53C2\u6570\u9519\u8BEF\uFF0C${e}`)},CALL_FUNCTION_ERR(r){const e=FunctionError.create(ErrorCode.CALL_FUNCTION_ERR,`requestId ${r.requestId}, ${r.errMsg}`);return e.requestId=r.requestId,e.errCode=r.errCode,e.errMsg=r.errMsg,e},SYS_ERR(r="\u5185\u90E8\u7CFB\u7EDF\u9519\u8BEF"){return FunctionError.create(ErrorCode.SYS_ERR,r)},NOT_FOUND(r){return FunctionError.create(ErrorCode.NOT_FOUND,r)}};

@@ -1,1 +0,1 @@

"use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.HttpRequester=void 0;const assert_1=__importDefault(require("assert")),koa_compose_1=__importDefault(require("koa-compose")),HttpRequestContext_1=require("./HttpRequestContext"),call_database_middleware_1=require("./call_database_middleware"),call_function_middleware_1=require("./call_function_middleware"),call_middleware_1=require("./call_middleware"),sign_middleware_factory_1=require("./sign_middleware_factory"),init_call_database_headers_middleware_1=require("./init_call_database_headers_middleware"),node_crypto_1=require("node:crypto"),error_handler_middleware_1=require("./error_handler_middleware");class HttpRequester{static#e;static#t;#r;constructor(e){this.#r=(0,koa_compose_1.default)(e)}async request(e,s,n,r,d){const a=d?.cloudConfig;(0,assert_1.default)(a,"cloud config not set");const o=JSON.stringify(n),l=(0,node_crypto_1.randomUUID)();r["x-request-id"]=l;const c={url:s,requestOptions:{method:e,contentType:"application/json",content:o,dataType:"json",headers:r}},i=new HttpRequestContext_1.HttpRequestContext(c,a);return await this.#r(i),i.result}static get function(){if(!this.#e){const e=[error_handler_middleware_1.errorHandlerMiddleware,(0,sign_middleware_factory_1.signMiddlewareFactory)(["x-to-function-name"]),call_function_middleware_1.callFunctionMiddleware,call_middleware_1.callMiddleware];this.#e=new HttpRequester(e)}return this.#e}static get database(){if(!this.#t){const e=[error_handler_middleware_1.errorHandlerMiddleware,init_call_database_headers_middleware_1.initCallDatabaseHeadersMiddleware,(0,sign_middleware_factory_1.signMiddlewareFactory)(["x-data-api-type","x-expire-timestamp"]),call_database_middleware_1.callDatabaseMiddleware,call_middleware_1.callMiddleware];this.#t=new HttpRequester(e)}return this.#t}}exports.HttpRequester=HttpRequester;
"use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.HttpRequester=void 0;const assert_1=__importDefault(require("assert")),koa_compose_1=__importDefault(require("koa-compose")),HttpRequestContext_1=require("./HttpRequestContext"),call_database_middleware_1=require("./call_database_middleware"),call_function_middleware_1=require("./call_function_middleware"),call_middleware_1=require("./call_middleware"),sign_middleware_factory_1=require("./sign_middleware_factory"),init_call_database_headers_middleware_1=require("./init_call_database_headers_middleware"),node_crypto_1=require("node:crypto"),error_handler_middleware_1=require("./error_handler_middleware");class HttpRequester{static#e;static#t;#r;constructor(e){this.#r=(0,koa_compose_1.default)(e)}async request(e,s,n,r,d){const a=d?.cloudConfig;(0,assert_1.default)(a,"cloud config not set");const o=JSON.stringify(n),l=(0,node_crypto_1.randomUUID)();r["x-request-id"]=l;const c={method:e,contentType:"application/json",content:o,dataType:"json",headers:r},u={url:new URL(s),requestOptions:c},i=new HttpRequestContext_1.HttpRequestContext(u,a);return await this.#r(i),i.result}static get function(){if(!this.#e){const e=[error_handler_middleware_1.errorHandlerMiddleware,(0,sign_middleware_factory_1.signMiddlewareFactory)(["x-to-function-name"]),call_function_middleware_1.callFunctionMiddleware,call_middleware_1.callMiddleware];this.#e=new HttpRequester(e)}return this.#e}static get database(){if(!this.#t){const e=[error_handler_middleware_1.errorHandlerMiddleware,init_call_database_headers_middleware_1.initCallDatabaseHeadersMiddleware,(0,sign_middleware_factory_1.signMiddlewareFactory)(["x-data-api-type","x-expire-timestamp"]),call_database_middleware_1.callDatabaseMiddleware,call_middleware_1.callMiddleware];this.#t=new HttpRequester(e)}return this.#t}}exports.HttpRequester=HttpRequester;

@@ -1,1 +0,1 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.signMiddlewareFactory=void 0;const utils_1=require("../../utils"),sign_1=require("../../sign");function signMiddlewareFactory(o){return async function(e,r){const n=(0,utils_1.getAlipayContext)(),t=Date.now(),i={authorization:"","x-from-app-id":n.APPID,"x-from-env-id":e.config.fromEnvId,"x-to-env-id":e.config.toEnvId,"x-from-instance-id":e.config.functionInstanceId,"x-from-function-name":e.config.functionName,"x-client-timestamp":`${t}`,"x-trace-id":n.TRACEID,"sofa-rpcid":`${n.RPCID}.${++n.rpcCount}`},s=["x-from-app-id","x-from-env-id","x-from-instance-id","x-from-function-name","x-client-timestamp","x-to-env-id",...o],d={secretId:e.config.secretId,secretKey:e.config.secretKey,method:e.req.requestOptions.method,headers:i,body:e.req.requestOptions.content,timestamp:t,signedHeaders:s};i.authorization=(0,sign_1.sign)(d),e.req.requestOptions.headers={...i,...e.req.requestOptions.headers},await r()}}exports.signMiddlewareFactory=signMiddlewareFactory;
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.signMiddlewareFactory=void 0;const utils_1=require("../../utils"),sign_1=require("../../sign");function signMiddlewareFactory(t){return async function(e,o){const n=(0,utils_1.getAlipayContext)(),r=Date.now(),i={authorization:"","x-from-app-id":n.APPID,"x-from-env-id":e.config.fromEnvId,"x-to-env-id":e.config.toEnvId,"x-from-instance-id":e.config.functionInstanceId,"x-from-function-name":e.config.functionName,"x-client-timestamp":`${r}`,"x-trace-id":n.TRACEID,"sofa-rpcid":`${n.RPCID}.${++n.rpcCount}`},s=["x-from-app-id","x-from-env-id","x-from-instance-id","x-from-function-name","x-client-timestamp","x-to-env-id",...t].sort(),a={path:e.req.url.pathname,query:e.req.url.search,secretId:e.config.secretId,secretKey:e.config.secretKey,method:e.req.requestOptions.method,headers:i,body:e.req.requestOptions.content,timestamp:r,signedHeaders:s};i.authorization=(0,sign_1.sign)(a),e.req.requestOptions.headers={...i,...e.req.requestOptions.headers},await o()}}exports.signMiddlewareFactory=signMiddlewareFactory;
export declare function sign(options: SignOptions): string;
export declare class SignOptions {
path: string;
query: string;
secretId?: string;

@@ -4,0 +6,0 @@ secretKey?: string;

@@ -1,9 +0,10 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SignOptions=exports.sign=void 0;const node_crypto_1=require("node:crypto");function sign(e){const s=e.signedHeaders.join(",");let t="";for(const a of e.signedHeaders){const o=e.headers[a];t+=`${a}:${o}
`}const n=getHash(e.body),d=`${e.method.toUpperCase()}
${t}
${s}
${n}
`,r="HMAC-SHA256",c=getHash(d),h=`${r}
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SignOptions=exports.sign=void 0;const node_crypto_1=require("node:crypto");function sign(e){const s=e.signedHeaders.join(",");let t="";for(const a of e.signedHeaders){const u=e.headers[a];t+=`${a}:${u}
`}const n=getHash(e.body||""),d=e.method.toUpperCase()+`
`+e.path+`
`+e.query+`
`+t+`
`+s+`
`+n,r="HMAC-SHA256",c=getHash(d),h=`${r}
${e.timestamp}
${c}
`,i=sha256(h,e.secretKey);return`${r} Credential=${e.secretId}, SignedHeaders=${s}, Signature=${i}`}exports.sign=sign;function sha256(e,s=""){return(0,node_crypto_1.createHmac)("sha256",s).update(e).digest("hex")}function getHash(e){return(0,node_crypto_1.createHash)("sha256").update(e).digest("hex")}class SignOptions{secretId;secretKey;method;body;headers;timestamp;signedHeaders;constructor(s){this.secretId=s.secretId,this.secretKey=s.secretKey,this.method=s.method,this.headers=s.headers,this.timestamp=s.timestamp,this.body=s.body,this.signedHeaders=s.signedHeaders}}exports.SignOptions=SignOptions;
`,i=sha256(h,e.secretKey);return`${r} Credential=${e.secretId}, SignedHeaders=${s}, Signature=${i}`}exports.sign=sign;function sha256(e,s=""){return(0,node_crypto_1.createHmac)("sha256",s).update(e).digest("hex")}function getHash(e){return(0,node_crypto_1.createHash)("sha256").update(e).digest("hex")}class SignOptions{path;query;secretId;secretKey;method;body;headers;timestamp;signedHeaders;constructor(s){this.secretId=s.secretId,this.secretKey=s.secretKey,this.method=s.method,this.headers=s.headers,this.timestamp=s.timestamp,this.body=s.body,this.signedHeaders=s.signedHeaders}}exports.SignOptions=SignOptions;

@@ -29,7 +29,6 @@ import { RequestOptions } from 'urllib';

}
export interface CallFunctionResult<T> {
export interface CallFunctionResult<T = any> {
requestId: string;
requestID: string;
result?: T;
errMsg?: string;
}

@@ -48,3 +47,3 @@ export interface CallFunctionResponse<T = object> {

export interface HttpRequest {
url: string;
url: URL;
requestOptions: RequestOptions;

@@ -71,3 +70,3 @@ }

fromEnvId: string;
toEnvId: string;
toEnvId?: string;
functionName: string;

@@ -74,0 +73,0 @@ functionGatewayVip: string;

{
"name": "@alipay/faas-server-sdk",
"version": "0.0.21",
"version": "0.0.22",
"description": "云函数服务 SDK",

@@ -36,2 +36,3 @@ "main": "lib/index.js",

"koa-compose": "^4.1.0",
"ali-rds": "^5.1.2",
"urllib": "^3.11.0"

@@ -38,0 +39,0 @@ },

# @alipay/faas-server-sdk
## README的意义
## MySQL 使用说明
README 文件通常是项目的第一个入口点。你应该通过 README 明确地告诉大家,为什么他们应该使用你的项目,以及安装和使用的方法。
```ts
import cloud from '@alipay/faas-server-sdk';
如果在仅仅看文档而不看代码的情况下就可以使用你的项目,该文档就完成了。 这个非常重要,因为这将使项目的文档接口与其内部实现分开,只要接口保持不变,就可以自由更改项目的内部结构。
const db = cloud.mysql();
**文档,而不是代码定义了项目的使用方式。**
一个规范的README文档能减少用户检索信息的时间。
## 标准 README
一个标准的README文件应当至少包含以下的内容:
- 项目背景:说明创建本项目的背景与动机,创建本项目试图解决的问题
- 安装方法:说明如何快速上手使用该项目
- 使用方法:列出本项目能够提供的功能以及使用这些功能的方法
- 文档:现阶段antcode鼓励用户使用语雀组织项目文档,在README上应当放入项目的语雀文档链接
## 附加内容
视项目的实际情况,同样也应该包含以下内容:
- 项目特性:说明本项目相较于其他同类项目所具有的特性
- 兼容环境:说明本项目能够在什么平台上运行
- 使用示例:展示一些使用本项目的小demo
- 主要项目负责人:使用“@”标注出本项目的主要负责人,方便项目的用户沟通
- 参与贡献的方式:规定好其他用户参与本项目并贡献代码的方式
- 项目的参与者:列出项目主要的参与人
- 已知用户:列出已经在生产环境中使用了本项目的全部或部分组件的公司或组织
- 赞助者:列出为本项目提供赞助的用户
export async function main(event, context) {
const userId = cloud.getAlipayContext().OPENID;
const rows = await db.query('SELECT * FROM todos where uid = ?', [ userId ]);
return { rows };
}
```
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc