Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Fukuhara
Product and Topic Expert
Product and Topic Expert
761
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と同じ結果が見られます。