Google Cloud Node.js Client
Node.js idiomatic client for Google Cloud Platform services.
This client supports the following Google Cloud Platform services:
If you need support for other Google APIs, check out the Google Node.js API Client library.
Where did gcloud-node
go?
gcloud-node
lives on under a new name, google-cloud
. Your code will behave the same, simply change your dependency:
$ npm uninstall --save gcloud
$ npm install --save google-cloud
- var gcloud = require('gcloud');
+ var gcloud = require('google-cloud');
Quick Start
$ npm install --save google-cloud
Example Applications
- nodejs-getting-started - A sample and tutorial that demonstrates how to build a complete web application using Cloud Datastore, Cloud Storage, and Cloud Pub/Sub and deploy it to Google App Engine or Google Compute Engine.
- gcloud-node-todos - A TodoMVC backend using google-cloud-node and Datastore.
- gitnpm - Easily lookup an npm package's GitHub repo using google-cloud-node and Google App Engine.
- gcloud-kvstore - Use Datastore as a simple key-value store.
- hya-wave - Cloud-based web sample editor. Part of the hya-io family of products.
- gstore-node - Google Datastore Entities Modeling library.
- gstore-api - REST API builder for Google Datastore Entities.
Authentication
With google-cloud
it's incredibly easy to get authenticated and start using Google's APIs. You can set your credentials on a global basis as well as on a per-API basis. See each individual API section below to see how you can auth on a per-API-basis. This is useful if you want to use different accounts for different Google Cloud services.
On Google Compute Engine
If you are running this client on Google Compute Engine, we handle authentication for you with no configuration. You just need to make sure that when you set up the GCE instance, you add the correct scopes for the APIs you want to access.
var projectId = process.env.GCLOUD_PROJECT;
var gcloud = require('google-cloud')({
projectId: projectId
});
Elsewhere
If you are not running this client on Google Compute Engine, you need a Google Developers service account. To create a service account:
- Visit the Google Developers Console.
- Create a new project or click on an existing project.
- Navigate to APIs & auth > APIs section and turn on the following APIs (you may need to enable billing in order to use these services):
- BigQuery API
- Cloud Bigtable API
- Cloud Bigtable Admin API
- Cloud Bigtable Table Admin API
- Google Cloud Datastore API
- Google Cloud DNS API
- Google Cloud Natural Language API
- Google Cloud Pub/Sub API
- Google Cloud Resource Manager API
- Google Cloud Speech API
- Google Cloud Storage
- Google Cloud Storage JSON API
- Google Cloud Vision API
- Google Compute Engine API
- Google Translate API
- Prediction API
- Stackdriver Logging API
- Navigate to APIs & auth > Credentials and then:
- If you want to use a new service account, click on Create new Client ID and select Service account. After the account is created, you will be prompted to download the JSON key file that the library uses to authenticate your requests.
- If you want to generate a new key for an existing service account, click on Generate new JSON key and download the JSON key file.
var projectId = process.env.GCLOUD_PROJECT;
var gcloud = require('google-cloud')({
projectId: projectId,
keyFilename: '/path/to/keyfile.json'
credentials: require('./path/to/keyfile.json')
});
You can also set auth on a per-API-instance basis. The examples below show you how.
Google BigQuery
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var bigquery = gcloud.bigquery;
Using the BigQuery API module
$ npm install --save @google-cloud/bigquery
var bigquery = require('@google-cloud/bigquery');
Preview
var bigqueryClient = bigquery({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
var schoolsDataset = bigqueryClient.dataset('schools');
var schoolsTable = schoolsDataset.table('schoolsData');
schoolsTable.import('/local/file.json', function(err, job) {});
var job = bigqueryClient.job('job-id');
job.getQueryResults(function(err, rows) {});
job.getQueryResults().on('data', function(row) {});
Google Cloud Bigtable
You may need to create a cluster to use the Google Cloud Bigtable API with your project.
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var bigtable = gcloud.bigtable;
Using the Cloud Bigtable API module
$ npm install --save @google-cloud/bigtable
var bigtable = require('@google-cloud/bigtable');
Preview
var bigtableClient = bigtable({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
var instance = bigtableClient.instance('my-instance');
var table = instance.table('prezzy');
table.getRows(function(err, rows) {});
var row = table.row('alincoln');
row.save('follows:gwashington', 1, function(err) {
if (err) {
}
row.get('follows:gwashington', function(err, data) {
if (err) {
}
});
});
Google Cloud Datastore
Follow the activation instructions to use the Google Cloud Datastore API with your project.
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var datastore = gcloud.datastore;
Using the Cloud Datastore API module
$ npm install --save @google-cloud/datastore
var datastore = require('@google-cloud/datastore');
Preview
var datastoreClient = datastore({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
var key = datastoreClient.key(['Product', 'Computer']);
datastoreClient.get(key, function(err, entity) {
console.log(err || entity);
});
var blogPostData = {
title: 'How to make the perfect homemade pasta',
author: 'Andrew Chilton',
isDraft: true
};
var blogPostKey = datastoreClient.key('BlogPost');
datastoreClient.save({
key: blogPostKey,
data: blogPostData
}, function(err) {
blogPostData.isDraft = false;
datastoreClient.save({
key: blogPostKey,
data: blogPostData
}, function(err) {
if (!err) {
}
});
});
Google Cloud DNS
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var dns = gcloud.dns;
Using the Cloud DNS API module
$ npm install --save @google-cloud/dns
var dns = require('@google-cloud/dns');
Preview
var dnsClient = dns({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
dnsClient.createZone('my-new-zone', {
dnsName: 'my-domain.com.'
}, function(err, zone) {});
var zone = dnsClient.zone('my-existing-zone');
var nsRecord = zone.record('ns', {
ttl: 86400,
name: 'my-domain.com.',
data: 'ns-cloud1.googledomains.com.'
});
zone.addRecord(nsRecord, function(err, change) {});
zone.export('/zonefile.zone', function(err) {});
Google Cloud Pub/Sub
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var pubsub = gcloud.pubsub;
Using the Cloud Pub/Sub API module
$ npm install --save @google-cloud/pubsub
var pubsub = require('@google-cloud/pubsub');
Preview
var pubsubClient = pubsub({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
var topic = pubsubClient.topic('my-topic');
topic.publish({
data: 'New message!'
}, function(err) {});
var options = {
reuseExisting: true
};
topic.subscribe('subscription-name', options, function(err, subscription) {
function onError(err) {}
function onMessage(message) {}
subscription.on('error', onError);
subscription.on('message', onMessage);
subscription.removeListener('message', onMessage);
subscription.removeListener('error', onError);
});
Google Cloud Storage
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var storage = gcloud.storage;
Using the Cloud Storage API module
$ npm install --save @google-cloud/storage
var storage = require('@google-cloud/storage');
Preview
var fs = require('fs');
var gcs = storage({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
gcs.createBucket('my-new-bucket', function(err, bucket) {
if (!err) {
}
});
var bucket = gcs.bucket('my-existing-bucket');
bucket.upload('/photos/zoo/zebra.jpg', function(err, file) {
if (!err) {
}
});
bucket.file('giraffe.jpg').download({
destination: '/photos/zoo/giraffe.jpg'
}, function(err) {});
var remoteReadStream = bucket.file('giraffe.jpg').createReadStream();
var localWriteStream = fs.createWriteStream('/photos/zoo/giraffe.jpg');
remoteReadStream.pipe(localWriteStream);
var localReadStream = fs.createReadStream('/photos/zoo/zebra.jpg');
var remoteWriteStream = bucket.file('zebra.jpg').createWriteStream();
localReadStream.pipe(remoteWriteStream);
Google Compute Engine
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var compute = gcloud.compute;
Using the Compute Engine API module
$ npm install --save @google-cloud/compute
var compute = require('@google-cloud/compute');
Preview
var gce = compute({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
var zone = gce.zone('us-central1-a');
var name = 'ubuntu-http';
zone.createVM(name, { os: 'ubuntu' }, function(err, vm, operation) {
operation
.on('error', function(err) {})
.on('running', function(metadata) {})
.on('complete', function(metadata) {
});
});
Google Prediction API
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var prediction = gcloud.prediction;
Using the Prediction API module
$ npm install --save @google-cloud/prediction
var prediction = require('@google-cloud/prediction');
Preview
var predictionClient = prediction({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
predictionClient.getModels(function(err, models) {
if (!err) {
}
});
var model = predictionClient.model('my-existing-model');
model.train('english', 'Hello from your friends at Google!', function(err) {});
model.query('Hello', function(err, results) {
if (!err) {
}
});
Google Translate API
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var translate = gcloud.translate;
Using the Translate API module
$ npm install --save @google-cloud/translate
var translate = require('@google-cloud/translate');
An API key is required for Translate. See Identifying your application to Google.
Preview
var translateClient = translate({
key: 'API Key'
});
translateClient.translate('Hello', 'es', function(err, translation) {
if (!err) {
}
});
translateClient.detect('Hello', function(err, results) {
if (!err) {
}
});
translateClient.getLanguages(function(err, languages) {
if (!err) {
}
});
Google Cloud Natural Language (Beta)
This is a Beta release of Google Cloud Natural Language. This feature is not covered by any SLA or deprecation policy and may be subject to backward-incompatible changes.
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var language = gcloud.language;
Using the Natural Language API module
$ npm install --save @google-cloud/language
var language = require('@google-cloud/language');
Preview
var languageClient = language({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
languageClient.detectEntities('Stephen of Michigan!', function(err, entities) {
});
var document = languageClient.document('Contributions welcome!');
document.detectSentiment(function(err, sentiment) {
});
document.annotate(function(err, annotations) {
});
Google Cloud Resource Manager (Beta)
This is a Beta release of Google Cloud Resource Manager. This feature is not covered by any SLA or deprecation policy and may be subject to backward-incompatible changes.
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var resource = gcloud.resource;
Using the Cloud Resource Manager API module
$ npm install --save @google-cloud/resource
var resource = require('@google-cloud/resource');
Preview
var resourceClient = resource({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
resourceClient.getProjects(function(err, projects) {
if (!err) {
}
});
var project = resourceClient.project();
project.getMetadata(function(err, metadata) {
});
Google Cloud Speech (Beta)
This is a Beta release of Google Cloud Speech. This feature is not covered by any SLA or deprecation policy and may be subject to backward-incompatible changes.
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var speech = gcloud.speech;
Using the Cloud Speech API module
$ npm install --save @google-cloud/speech
var speech = require('@google-cloud/speech');
Preview
var speechClient = speech({
projectId: 'my-project',
keyFilename: '/path/to/keyfile.json'
});
speechClient.recognize('./audio.raw', {
encoding: 'LINEAR16',
sampleRate: 16000
}, function(err, transcript) {
});
fs.createReadStream('./audio.raw')
.on('error', console.error)
.pipe(speechClient.createRecognizeStream({
config: {
encoding: 'LINEAR16',
sampleRate: 16000
},
singleUtterance: false,
interimResults: false
}))
.on('error', console.error)
.on('data', function(data) {
});
Google Cloud Vision (Beta)
This is a Beta release of Google Cloud Vision. This feature is not covered by any SLA or deprecation policy and may be subject to backward-incompatible changes.
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var vision = gcloud.vision;
Using the Cloud Vision API module
$ npm install --save @google-cloud/vision
var vision = require('@google-cloud/vision');
Preview
var visionClient = vision({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
visionClient.detectText('./image.jpg', function(err, text) {
});
visionClient.detectFaces('./image.jpg', function(err, faces) {
});
Stackdriver Logging (Beta)
This is a Beta release of Stackdriver Logging. This API is not covered by any SLA or deprecation policy and may be subject to backward-incompatible changes.
Using the all-in-one module
$ npm install --save google-cloud
var gcloud = require('google-cloud');
var logging = gcloud.logging;
Using the Stackdriver Logging API module
$ npm install --save @google-cloud/logging
var logging = require('@google-cloud/logging');
Preview
var loggingClient = logging({
projectId: 'grape-spaceship-123',
keyFilename: '/path/to/keyfile.json'
});
var gcs = storage();
loggingClient.createSink('my-new-sink', {
destination: gcs.bucket('my-sink')
}, function(err, sink) {});
var syslog = loggingClient.log('syslog');
var resource = {
type: 'gce_instance',
labels: {
zone: 'global',
instance_id: '3'
}
};
var entry = syslog.entry(resource, {
delegate: process.env.user
});
syslog.critical(entry, function(err) {});
loggingClient.getEntries(function(err, entries) {
if (!err) {
}
});
Contributing
Contributions to this library are always welcome and highly encouraged.
See CONTRIBUTING for more information on how to get started.
License
Apache 2.0 - See COPYING for more information.