部署在Heroku的Node.js应用从MongoDB返回空数组求助
Heroku部署应用从MongoDB获取电影数据返回空数组排查求助
我将应用部署在Heroku平台,本应从MongoDB数据库获取电影数据,但/movies接口始终返回空数组,尝试多种方法仍无法解决问题。
环境与结构说明
- MongoAtlas集群中存在
movies集合,且集合内存储有电影数据(附集群结构截图)
服务端核心代码
const express = require ('express'), fs = require('fs'), path = require('path'), bodyParser = require('body-parser'), uuid = require('uuid'), morgan = require('morgan'), mongoose = require('mongoose'), dotenv = require('dotenv').config(), Models = require('./models.js'); const { check, validationResult } = require('express-validator'); const Movies = Models.Movie; const Users = Models.User; const app = express(); app.use(bodyParser.json()); // 连接MongoDB,CONNECTION_URI已在.env和Heroku配置变量中定义 mongoose.connect(process.env.CONNECTION_URI, { useNewUrlParser: true, useUnifiedTopology: true, }) .catch((err) => console.error('MongoDb connection failed: ' + err)); mongoose.connection.on('error', (err) => { console.error('MongoDb connection error: ' + err); }); const cors = require('cors'); app.use(cors()); // 导入认证模块 let auth = require('./auth')(app); const passport = require('passport'); require('./passport'); // 日志记录配置 const accessLogStream = fs.createWriteStream(path.join(__dirname, 'log.txt'), {flags: 'a'}) app.use(morgan('combined', {stream: accessLogStream})); app.use('/documentation.html', express.static('public/documentation.html')); // 打印连接URI用于排查 console.log("Connection URI:", process.env.CONNECTION_URI); // 获取电影列表接口 app.get('/movies', passport.authenticate('jwt', { session: false }), (req, res) => { Movies.find() .then((movies) => { console.log('Movies fetched:', movies); res.status(200).json(movies); }) .catch((err) => { console.error(err); res.status(500).send('Error: ' + err); }); }); // 全局错误处理 app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send('Something broke!'); }); // 启动服务 const port = process.env.PORT || 8080; app.listen(port, '0.0.0.0',() => { console.log('Listening on Port ' + port); });
models.js代码
const mongoose = require('mongoose'); const bcrypt = require('bcryptjs'); let movieSchema = mongoose.Schema({ Name: {type: String, required: true}, Director: [{ Name: String, Description: String, required:false}], ImagePath: {type: String}, Description: {type: String, required: true}, Tags: [{ Name: String, Description: String}], Featured: {type: Boolean} }, {collection: 'movies'}) let Movie = mongoose.model('Movie', movieSchema); module.exports.Movie = Movie;
已尝试的操作
- 移除movieSchema中的
{collection: 'movies'}定义,问题依旧存在
测试结果
- 使用Postman携带有效JWT令牌请求
/movies接口,返回空数组 - Heroku日志显示
Movies fetched: [] - 本地localhost:1234环境测试,请求可正常发起,但返回的电影数据仍为空数组
我判断问题出在后端逻辑或数据库连接映射环节,恳请各位提供技术排查思路或解决方案!
内容的提问来源于stack exchange,提问作者jaceyH
相关产品推荐
相关产品推荐

