Node.js + Mongoose 可以在本地工作,但不能在 Heroku 上工作
Posted
技术标签:
【中文标题】Node.js + Mongoose 可以在本地工作,但不能在 Heroku 上工作【英文标题】:Node.js + Mongoose works locally, but not on Heroku 【发布时间】:2012-04-01 14:25:00 【问题描述】:这是我在 Heroku 上运行的 node.js 文件。它在本地完美运行,但是当我将它推送到 Heroku 时,不会创建数据库集合,也不会引发任何错误。最终,我只是想让它在 Heroku 上运行时实际创建连接。谢谢。
var mongoose = require('mongoose'),
db_url = process.env.MONGOHQ_URL || "mongodb://john:<mypasswordwashere>@staff.mongohq.com:10053/app3305538",
db = mongoose.connect(db_url),
Schema = mongoose.Schema;
//Mongoose DB Test
var MsgSchema = new Schema(
date: type: Date, default: Date.now,
message: String
);
var MsgModel = db.model("messages", MsgSchema);
var Msg = new MsgModel();
Msg.message = "blurgh";
Msg.save();
【问题讨论】:
【参考方案1】:另一个可能的混淆来源是,如果您同时采购 MongoLab 和 MongoHQ,那么 Heroku tutorial 中提供的默认连接字符串将中断您的数据库会话:
var mongoUri = process.env.MONGOLAB_URI || process.env.MONGOHQ_URL || 'mongodb://localhost/mydb';
即:如果您只使用同时安装了两者的 MongoHQ,则应丢弃 process.env.MONGOLAB_URI
【讨论】:
【参考方案2】:你在heroku中指定了节点版本吗?
请参考这个。 (我也混淆了同样的问题。但解决了。) http://devcenter.heroku.com/articles/nodejs-versions
【讨论】:
【参考方案3】:您对.save()
的调用需要一个回调函数。尝试在其中添加一条调试消息,看看它是否显示有关失败原因的任何信息,如下所示:
Msg.save(function(err)
if(err)
console.log("Error:", err);
else
console.log("success");
)
那么你应该可以在heroku日志中看到结果了。
【讨论】:
我添加了控制台消息,但在 Heroku 日志中都没有调用它们。 添加调试消息以确定您的脚本挂在哪一行代码上。很可能是 mongoose.connect,它可能与 MONGOHQ_URL 有关。尝试在本地设置环境变量并在本地使用 mongoose 而不是从 heroku 连接到 mongohq 实例。 你能仔细检查一下 + 发布 heroku 应用程序使用的 nodejs 版本(和 mongodb 驱动程序版本)吗?以上是关于Node.js + Mongoose 可以在本地工作,但不能在 Heroku 上工作的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Mongoose/Node.js 中同时保存多个文档?
Node.js Mongoose .update 与 ArrayFilters
使用 JWT (Node.js + mongoose) 在 REST API 中管理用户权限的最佳方法