Google Cloud MySQL RestApi多个输出

问题描述 投票:0回答:1

我有以下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]);
    });
  });
}
mysql node.js
1个回答
0
投票

没有NodeJ方面的专家,我总是用此行resolve(results[0]);来返回查询的第一行>

尝试改为执行此操作resolve(results);

此外,默认情况下,Cloud Run最多可以同时处理80个请求(您可以使用--concurrency参数减少该请求)。因此,建议您将池连接限制connectionLimit: 1,设置为等于Cloud Run的并发值。否则,您的并发请求将等待免费的数据库连接来执行其请求。

© www.soinside.com 2019 - 2024. All rights reserved.