我有以下index.js文件,这是我使用Google Cloud Run进行容器化和部署的一组文件的一部分。然后,这使我能够通过URL通过RestAPI通过RestAPI访问其中一个表中的数据,并通过添加正斜杠然后添加我想要输入的ID(例如/ 13)来获取特定userId的结果。我不熟悉所有这些内容,但是我的SQL查询仅返回一个条目,而不是每个ID都包含5个条目(这是电影推荐系统,旨在返回具有最高预测的五部电影)。谁能提供有关如何调整它以获取所有输出条目的任何信息?
提前感谢!
const mysql = require('mysql');
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json());
const port = process.env.PORT || 8082;
app.listen(port, () => {
console.log('REST API listening on port ', port);
});
app.get('/', async (req, res) => {
res.json({status: 'API is ready to serve recommendations from ' + process.env.LOCATION});
});
app.get('/:userId', async(req, res) => {
const userId = parseInt(req.params.userId);
const recommendation = await getRecommendation(userId);
res.json({status:'success', data: {recommendation: recommendation}});
});
let cachedDbPool;
function getDbPool() {
if(!cachedDbPool) {
cachedDbPool = mysql.createPool({
connectionLimit: 1,
user: process.env.SQL_USER,
password: process.env.SQL_PASSWORD,
database: process.env.SQL_NAME,
socketPath: `/cloudsql/${process.env.INST_CON_NAME}`
});
}
return cachedDbPool;
}
async function getRecommendation(userId) {
return new Promise(function(resolve, reject) {
const sql = 'SELECT a.movieTitle, r.prediction FROM MovieInfo a INNER JOIN Recommendation r ON r.movieId = a.movieId WHERE r.userId = ? ORDER BY r.prediction desc';
getDbPool().query(sql, [userId], (err, results) => {
resolve(results[0]);
});
});
}
没有NodeJ方面的专家,我总是用此行resolve(results[0]);
来返回查询的第一行>
尝试改为执行此操作resolve(results);
此外,默认情况下,Cloud Run最多可以同时处理80个请求(您可以使用--concurrency
参数减少该请求)。因此,建议您将池连接限制connectionLimit: 1,
设置为等于Cloud Run的并发值。否则,您的并发请求将等待免费的数据库连接来执行其请求。