Angular2 CLI webpack を使用しているプロジェクトを作成するために、Angular2 を使用して Web アプリを構築しています。Angular2 アプリは他の外部パッケージも使用します (例: Firebase)。それに加えて、node.js で実行される REST API を作成する必要があります。
node.jsサーバーを使用してAngular2アプリとREST APIの両方を提供するにはどうすればよいですか
Angular2 CLI webpack を使用しているプロジェクトを作成するために、Angular2 を使用して Web アプリを構築しています。Angular2 アプリは他の外部パッケージも使用します (例: Firebase)。それに加えて、node.js で実行される REST API を作成する必要があります。
node.jsサーバーを使用してAngular2アプリとREST APIの両方を提供するにはどうすればよいですか
ng build
アプリをビルド ディレクトリにビルドするために使用します。以下は、Angular2 アプリを提供する Express を使用する nodejs アプリの例です。
/*
Put content of angular2 build into 'public' folder.
*/
const html = __dirname + '/public';
const port = 4000;
const apiUrl = '/api';
// Express
const bodyParser = require('body-parser');
const compression = require('compression');
const express = require('express');
var app = express();
app
.use(compression())
.use(bodyParser.json())
// Static content
.use(express.static(html))
// Default route
.use(function(req, res) {
res.sendFile(html + 'index.html');
})
// Start server
.listen(port, function () {
console.log('Port: ' + port);
console.log('Html: ' + html);
});
// continue with api code below ...
これが機能している完全なバックエンドコードです
const express = require('express');
var app = express();
var port = 9999;
function getRoot(request, response) {
response.sendFile(path.resolve('./public/angular/index.html'));
}
function getUndefined(request, response) {
response.sendFile(path.resolve('./public/angular/index.html'));
}
app.use(express.static('./public/angular'));
app.get('/', getRoot);
app.get('/*', getUndefined);
// Start server
app.listen(port, function () {
console.log('server running at port: ' + port);
});
Express node server with Angular 2 CLIドキュメントに従って、Node.js サーバーを介してアプリケーションを提供します。アプリケーションは、Node.js と REST フル API を介して提供されています。この REST を要件として設計できます。
例えば
http://localhost:5000/appでアプリケーションを提供します
app.get('/app/*', function(req, res) {
res.sendFile(path.join(__dirname, 'index.html'))
});
また
http://localhost:5000/rest/contactsを使用して REST 呼び出しからデータを提供する
app.get('/rest/user', function(req, res) {
res.send({
"id": 2,
"name": "Jhon",
})
});