Technology Blog Posts by SAP
cancel
Showing results for 
Search instead for 
Did you mean: 
Fukuhara
Product and Topic Expert
Product and Topic Expert
897
OData(get)をNode.js(express)で呼び出すサンプルアプリをSAP CP CFにデプロイしました。

GitHubにコードを置いています。

前提


開発PC



  • Ubuntu18.04.01 LTS on VMWare Workstation

  • cf CLI 6.49.0 インストール済

  • node.js 12.14.1(nvmで管理) インストール済

  • npm 6.13.4 インストール済


Cloud Foundry



  • Nodejs Buildpack version 1.7.4

  • CF Trial (Europe – Frankfurt)


ステップ


1. Node.js開発


1.1. プロジェクト作成


ローカルPCにプロジェクトフォルダ"node-cf-rest"を作成
touch node-cf-rest

1.2. npmのセットアップ


ディレクトリを"node-cf-rest"に移動してnpmのセットアップ(GitでCloneしてから実施しているので、git repositoryと紐付いてます)。
$ cd node-cf-rest
$ npm init

This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (cf-rest) node-cf-rest
version: (1.0.0)
description: Node.js consuming REST API on Cloud Foundry
entry point: (index.js)
test command:
git repository: (https://github.com/YoheiFukuhara/node-cf-rest.git)
keywords:
author:
license: (ISC)
About to write to /home/i348221/Apps/node/node-cf-rest/package.json:

{
"name": "node-cf-rest",
"version": "1.0.0",
"description": "Node.js consuming REST API on Cloud Foundry",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/YoheiFukuhara/node-cf-rest.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/YoheiFukuhara/node-cf-rest/issues"
},
"homepage": "https://github.com/YoheiFukuhara/node-cf-rest#readme"
}


Is this OK? (yes) yes

1.3. パッケージインストール


express(4.17.1)とrequest(2.88.0)をインストール
npm install --save express request

1.4. index.js作成


プロジェクトディレクトリ直下に"index.js"を作成。

※以下の通信先およびユーザ・パスワードを変更してください。
// Import modules
const express = require('express')
const request = require('request')

const app = express()
const port = process.env.PORT || 3000;;

// Get method
app.get('/', (req, res) => res.send('Hello World! for GET'))

app.get('/api', function (req, res) {

request.get({
uri: 'http://<host>:<port>/sap/opu/odata/sap/CB_CUSTOMER_SRV/Customers?$format=json',
headers: {'Content-type': 'application/json'},
auth: {
'user': '<user>',
'pass': '<password>',
'sendImmediately': false
}
}, function(err, req, data){
res.status(200).json(data)
console.log(data);
});
});

// Listen
app.listen(port, () => console.log(`Example app listening on port ${port}!`))

 

1.5. package.json変更


package.jsonの開始スクリプトを変更
{
"name": "node-cf-rest",
"version": "1.0.0",
"description": "Node.js consuming REST API on Cloud Foundry",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/YoheiFukuhara/node-cf-rest.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/YoheiFukuhara/node-cf-rest/issues"
},
"homepage": "https://github.com/YoheiFukuhara/node-cf-rest#readme",
"dependencies": {
"express": "^4.17.1",
"request": "^2.88.0"
}
}

1.6. ローカルテスト


ローカルで起動してテスト。
$ node index.jp
Example app listening on port 3000!

ブラウザから"http://localhost:3000"にアクセスすると"Hello World! for GET"と表示され、"http://localhost:3000/api"にアクセスするとodataで取得したjsonが表示されます。

2. SAP CP CF Appにデプロイ


2.1. manifest.yaml作成


プロジェクトディレクトリ直下にmanifest.yamlを作成
---
applications:
- name: node-rest
random-route: true
memory: 128M

2.2. cf にログイン・デプロイ


cf にログインしてpushでデプロイします。
cf login
cf push node-rest

デプロイに成功すれば、cf側で作られたurlに対してブラウザアクセスすることで1.6と同じ結果が見られます。