mirror of https://github.com/dapr/samples.git
100 lines
2.7 KiB
JavaScript
100 lines
2.7 KiB
JavaScript
// This app is called by the provider to score the tweets using cognitive
|
|
// services. When this app starts Dapr registers its name so other services
|
|
// can use Dapr to call this service.
|
|
require("isomorphic-fetch");
|
|
const express = require("express");
|
|
const logger = require("./logger");
|
|
|
|
// express
|
|
const port = 3002;
|
|
const app = express();
|
|
app.use(express.json());
|
|
|
|
// Cognitive Services API
|
|
// The KEY 1 value from Azure Portal, Keys and Endpoint section
|
|
const apiToken = process.env.CS_TOKEN || "";
|
|
|
|
// The Endpoint value from Azure Portal, Keys and Endpoint section
|
|
const endpoint = process.env.CS_ENDPOINT || "";
|
|
|
|
// The full URL to the sentiment service
|
|
const apiURL = `${endpoint}text/analytics/v2.1/sentiment`;
|
|
|
|
// Root get that just returns the configured values.
|
|
app.get("/", (req, res) => {
|
|
logger.debug("sentiment endpoint: " + endpoint);
|
|
logger.debug("sentiment apiURL: " + apiURL);
|
|
res.status(200).json({
|
|
message: "hi, nothing to see here, try => POST /sentiment-score",
|
|
endpoint: endpoint,
|
|
apiURL: apiURL,
|
|
});
|
|
});
|
|
|
|
// This service provides this scoring method
|
|
app.post("/sentiment-score", (req, res) => {
|
|
let body = req.body;
|
|
let lang = body.lang;
|
|
let text = body.text;
|
|
logger.debug("sentiment req: " + JSON.stringify(body));
|
|
|
|
if (!text || !text.trim()) {
|
|
res.status(400).send({ error: "text required" });
|
|
return;
|
|
}
|
|
|
|
if (!lang || !lang.trim()) {
|
|
lang = "en";
|
|
}
|
|
|
|
const reqBody = {
|
|
documents: [
|
|
{
|
|
id: "1",
|
|
language: lang,
|
|
text: text,
|
|
},
|
|
],
|
|
};
|
|
|
|
// Call cognitive service to score the tweet
|
|
fetch(apiURL, {
|
|
method: "POST",
|
|
body: JSON.stringify(reqBody),
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
"Ocp-Apim-Subscription-Key": apiToken,
|
|
},
|
|
})
|
|
.then((_res) => {
|
|
if (!_res.ok) {
|
|
res.status(400).send({ error: "error invoking cognitive service" });
|
|
return;
|
|
}
|
|
return _res.json();
|
|
})
|
|
.then((_resp) => {
|
|
// Send the response back to the other service.
|
|
const result = _resp.documents[0];
|
|
logger.debug(JSON.stringify(result));
|
|
res.status(200).send(result);
|
|
})
|
|
.catch((error) => {
|
|
logger.error(error);
|
|
res.status(500).send({ message: error });
|
|
});
|
|
});
|
|
|
|
// Make sure we have all the required information
|
|
if (apiToken == "" || endpoint == "") {
|
|
logger.error("you must set CS_TOKEN and CS_ENDPOINT environment variables");
|
|
throw new Error(
|
|
"you must set CS_TOKEN and CS_ENDPOINT environment variables"
|
|
);
|
|
} else {
|
|
logger.debug("CS_TOKEN: " + apiToken);
|
|
logger.debug("CS_ENDPOINT: " + endpoint);
|
|
}
|
|
|
|
app.listen(port, () => logger.info(`Node App listening on port ${port}!`));
|