mirror of https://github.com/dapr/samples.git
91 lines
2.4 KiB
JavaScript
91 lines
2.4 KiB
JavaScript
// ------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT License.
|
|
// ------------------------------------------------------------
|
|
|
|
const daprPort = process.env.DAPR_HTTP_PORT || "3500";
|
|
|
|
// The Dapr endpoint for the state store component to store the tweets.
|
|
const pubsubEndpoint = `http://localhost:${daprPort}/v1.0/publish/pubsub/inventory`;
|
|
|
|
const express = require('express');
|
|
const axios = require('axios');
|
|
|
|
const app = express();
|
|
// Dapr publishes messages with the application/cloudevents+json content-type
|
|
app.use(express.json({ type: ['application/json', 'application/*+json'] }));
|
|
|
|
const port = 3000;
|
|
|
|
app.get('/dapr/subscribe', (_req, res) => {
|
|
// Programmatic subscriptions
|
|
// See ./components/subscription.yaml for declarative subscription.
|
|
//
|
|
res.json([
|
|
// Previous subscription structure.
|
|
// {
|
|
// pubsubname: "pubsub",
|
|
// topic: "inventory",
|
|
// route: "products"
|
|
// }
|
|
//
|
|
// Subscription with routing rules and default route.
|
|
// {
|
|
// pubsubname: "pubsub",
|
|
// topic: "inventory",
|
|
// routes: {
|
|
// rules: [
|
|
// {
|
|
// match: `event.type == "widget"`,
|
|
// path: "widgets"
|
|
// },
|
|
// {
|
|
// match: `event.type == "gadget"`,
|
|
// path: "gadgets"
|
|
// }
|
|
// ],
|
|
// default: "products"
|
|
// }
|
|
// }
|
|
]);
|
|
});
|
|
|
|
// Default product handler.
|
|
app.post('/products', (req, res) => {
|
|
console.log("🤔 PRODUCT (default): ", req.body);
|
|
console.log();
|
|
res.sendStatus(200);
|
|
});
|
|
|
|
// Specific handler for widgets.
|
|
app.post('/widgets', (req, res) => {
|
|
console.log("🪛 WIDGET: ", req.body);
|
|
console.log();
|
|
res.sendStatus(200);
|
|
});
|
|
|
|
// Specific handler for gadgets.
|
|
app.post('/gadgets', (req, res) => {
|
|
console.log("📱 GADGET: ", req.body);
|
|
console.log();
|
|
res.sendStatus(200);
|
|
});
|
|
|
|
// Allow publishing freeform cloud events to the topic.
|
|
app.post('/publish', async (req, res) => {
|
|
console.log("publishing", req.body);
|
|
console.log();
|
|
axios.post(pubsubEndpoint, req.body, {
|
|
headers: {
|
|
'content-type': 'application/cloudevents+json'
|
|
}
|
|
})
|
|
.then(() => { res.sendStatus(200); })
|
|
.catch(error => {
|
|
res.sendStatus(500);
|
|
console.error('There was an error!', error);
|
|
});
|
|
});
|
|
|
|
app.listen(port, () => console.log(`Node App listening on port ${port}!`));
|