appengine-nodejs, 使用 node.js 访问 App Engine服务的实用程序

分享于 

9分钟阅读

GitHub

  繁體 雙語
Utility library for accessing App Engine services using Node.js
  • 源代码名称:appengine-nodejs
  • 源代码网址:http://www.github.com/googlearchive/appengine-nodejs
  • appengine-nodejs源代码文档
  • appengine-nodejs源代码下载
  • Git URL:
    git://www.github.com/googlearchive/appengine-nodejs.git
    Git Clone代码到本地:
    git clone http://www.github.com/googlearchive/appengine-nodejs
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/googlearchive/appengine-nodejs
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    status: inactive

    这里项目不再主动开发或者维护。

    使用中的Google来使用 Google,请使用gcloud节点

    nodejs

    用于与应用引擎特定服务进行交互的node.js 库的实验集在 Google App Engine 托管vm中,使用定制的运行时。

    要开始,请克隆快速入门项目并按照下面的说明进行操作。

    用法

    这个库只能在应用引擎托管VM中工作,或者使用托管 VM SDK。

    将这里库声明为 package.json 中的依赖项:

    
    "dependencies": {
    
    
    "appengine":"git://github.com/GoogleCloudPlatform/appengine-nodejs.git",
    
    
     }
    
    
    
    

    使用以下内容向应用程序添加 Dockerfile:

    
     FROM google/nodejs-runtime
    
    
    
    

    然后,在调用这里库中的函数之前,http处理程序需要确保用三个参数调用 appengine.middleware.base 函数: node.js 请求,node.js 响应和回调。

    express.js 这样的框架,如果你将该函数作为中间件进行 register。 下面是一个示例:

    
     var appengine = require('appengine');
    
    
     var express = require('express');
    
    
    
     var app = express();
    
    
     app.use(appengine.middleware.base);
    
    
    //... register any handlers...
    
    
     app.listen(8080, '0.0.0.0');
    
    
    
    

    命令行 api

    这个库目前支持可以用于正式运行时( 如Java或者 python )的应用程序引擎api的子集。

    应用程序可以使用任何其他 Google api,例如Google云存储或者Google日历,通过 googleapis 或者 gcloud节点库:

    
    "dependencies": {
    
    
    "googleapis" :"latest"
    
    
    "gcloud" :"latest"
    
    
     }
    
    
    
    

    这里库提供的所有API函数都作为回调的最后一个参数,换句话说,函数是表单的函数 function(err, arg1, arg2,.. .) 第一个参数始终是可选的Error 对象( 如果没有错误,则为 null )。 后面的参数依赖于API函数本身,下面将描述。

    日志记录

    appengine.logOneLine
    
     appengine.logOneLine(request, message, level, function(err) {.. . });
    
    
    
    

    在指定的日志级别记录消息( 字符串)。

    默认情况下缓冲日志记录。 当调用 request.end() 或者缓冲区增长过大或者在一定时间之后,它们会被刷新。

    两个警告:

    • 日志刷新从不异步,因此,在 60秒后,应用程序必须定期调用 appengine.logOneLine
    • request.end() 方法在后台请求中从不调用

    appengine.flushLogs 方法可以用于在任何时候刷新缓冲日志。

    有效日志级别为:

    
     appengine.LogLevel.DEBUG
    
    
     appengine.LogLevel.INFO
    
    
     appengine.LogLevel.WARNING
    
    
     appengine.LogLevel.ERROR
    
    
     appengine.LogLevel.CRITICAL
    
    
    
    

    回调是可选的。注意,大多数对 logOneLine的调用将立即返回,有些可能会导致刷新缓冲区。

    以下代码段在 INFO 级别日志,忽略任何记录错误:

    
     appengine.logOneLine(request, 'this is a test', appengine.LogLevel.INFO);
    
    
    
    

    为了实现向后兼容性,可以在没有日志级别或者没有回调的情况下调用相同的函数:

    
     appengine.logOneLine(request, message, function(err) {.. . });
    
    
    
     appengine.logOneLine(request, message);
    
    
    
    

    在本例中,它将给定消息记录在调试日志级别。

    appengine.flushLogs
    
     appengine.flushLogs(request, function(err) {.. . });
    
    
    
    

    刷新任何缓冲日志记录。

    Memcache

    appengine.memcache.get
    
     appengine.memcache.get(request, key, function(err, value) {.. . });
    
    
    
    

    从memcache读取给定键( 还有一个字符串)的值( 字符串)。

    appengine.memcache.set
    
     appengine.memcache.set(request, key, value, function(err) {.. . });
    
    
    
    

    向memcache写入给定键( 还有一个字符串)的值( 字符串)。

    任务队列

    appengine.taskqueue.add
    
     appengine.taskqueue.add(request, taskOptions, function(err) {.. . });
    
    
    
    

    向队列中添加任务。 taskOptions 必须是具有以下属性的对象:

    • url: 要发送到的字符串,需要
    • queueName: 字符串,队列 NAME,可选
    • taskName: 字符串,任务 NAME,可选
    • etaUsec: 字符串,以微秒为单位,比如 "1000",可选
    • method: 使用的http方法,"get""post""put" 或者 "delete",可选,默认为 "post"
    • body: 一个字符串,请求的主体,可选的,只用于,和post方法
    • headers: 可选,一个包含http头作为属性/值对的对象

    模块

    appengine.modules.getHostname
    
     appengine.modules.getHostname(request, module, version, instance, function(err, hostname) {.. . });
    
    
    
    

    返回用于与给定的module/version/instance ( 所有字符串,所有所需) 通信的主机名( 字符串)。

    系统

    appengine.system.getBackgroundRequest
    
     appengine.system.getBackgroundRequest(request, function(err, backgroundRequest) {.. . });
    
    
    
    

    在后台返回一个新的请求,如可以在后台生成应用程序引擎API调用,在请求处理程序外调用。

    公共 Pattern 是在启动请求期间调用这个 API,并存储返回的请求对象供以后使用。

    应用程序代码不应假定在返回的后台请求对象上定义任何特定属性。

    认证

    appengine.auth.getServiceAccountToken
    
     appengine.auth.getServiceAccountToken(request, function(err, token) {.. . });
    
    
    
    

    返回虚拟服务器的服务帐户的OAuth令牌,由元数据服务器提供。 token 是具有三个属性的对象:

    • accessToken: 字符串,访问令牌本身
    • tokenType: 字符串,返回的令牌类型,比如 "Bearer"
    • expiresIn: 一个数字,以秒为单位的过期时间

    元数据

    appengine.metadata.getAttribute
    
     appengine.metadata.getAttribute(request, name, function(err, value) {.. . });
    
    
    
    

    返回具有指定 NAME ( 字符串)的元数据属性的值( 字符串)。 例如要检索 foo 实例属性,要使用的NAME 是 "instance/attributes/foo"

    中间件

    appengine.middleware.base
    
     appengine.middleware.base(request, response, function() {.. . });
    
    
    
    

    从请求头和环境属性提取应用引擎特定信息的中间件函数,并将它们设置为 request.appengine 下的请求。 这个函数必须由所有打算进行任何应用程序引擎API调用的http处理程序调用。


    服务  acc  UTIL  UTI  services  工具  
    相关文章