数据未保存在使用Mongoose的MongoDB中
Data not saving in MongoDB using Mongoose
我是Nodejs世界的新手。我正在尝试使用Mongoose在MongoDB中插入数据。这个想法是
- 我将在节点上运行一台服务器 - 任何传入的开机自检数据都将保存在Mongo中。
以下代码时的问题没有数据保存在MongoDB中,也没有显示错误。我在这里错过了什么。任何帮助将不胜感激。
我有下面的代码,可以在mongoDB中为传入的http请求写入数据。
var http = require('http') // http module
, fs = require('fs') // file system module
, qs = require('querystring') // querystring parser
, mongoose = require('mongoose');
mongoose.connect("mongodb://localhost/app_data_db");
var db = mongoose.connection;
var appDataSchema = new mongoose.Schema({
record_id: Number,
app_version: Number,
imei: String,
created_time: Date,
device_uid: String,
model: String
});
var appDataModel = mongoose.model("app_data_collection",appDataSchema);
var PORT=8080;
http.createServer(function(req,res){
if(req.method == "POST") {
var POST = {};
//parse query string
req.on('data', function(data) {
data = data.toString();
data = data.split('&');
for (var i = 0; i < data.length; i++) {
var _data = data[i].split("=");
POST[_data[0]] = _data[1];
}
db.once('open', function (callback) {
appDataModel.create({
record_id: POST["id"],
app_version: POST["app_version"],
imei: POST["imei"],
created_time: new Date((parseInt(POST["created_time"]) + 19800) *1000), // to set correct time zone IST
device_uid: POST["device_uid"],
model: POST["model"]
});
});
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('saved to DB:'+POST["id"]+''n');
console.log('saved to DB:'+POST["id"]+''n');
});
mongoose.disconnect();
}
}).listen(PORT);
为了测试这一点,我手动触发了这个 curl 调用:
curl -X POST --data "id=58648148&app_version=4.8&imei=355886053224492&created_time=1417372202&device_uid=e385c8a5a4c01304&model=GT-I9082" http://localhost:8080
你的代码有几个问题:
1)你在回调之外调用mongoose.disconnect
,这意味着它在执行回调之前被调用
2)你在回调中创建模型,但在回调之外发送响应,所以响应是在创建模型之前发送的
3)最后create
方法在将实体保存到数据库时提供回调,您不会全部使用它
下面是修改后的代码:
mongoose.connect("mongodb://localhost/app_data_db");
db.on('open', function() {
http.createServer(function(req, res) {
if(req.method == "POST") {
var POST = {};
//parse query string
req.on('data', function(data) {
data = data.toString();
data = data.split('&');
for (var i = 0; i < data.length; i++) {
var _data = data[i].split("=");
POST[_data[0]] = _data[1];
}
appDataModel.create({
record_id: POST["id"],
app_version: POST["app_version"],
imei: POST["imei"],
created_time: new Date((parseInt(POST["created_time"]) + 19800) *1000), // to set correct time zone IST
device_uid: POST["device_uid"],
model: POST["model"]
},
function(err){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('saved to DB:'+POST["id"]+''n');
console.log('saved to DB:'+POST["id"]+''n');
mongoose.disconnect();
});
});
}
}).listen(PORT);
});
我想
我得到了这个工作。我已经把猫鼬连接移到了里面。其余的都是一样的。由于我想发布代码,因此回答而不是评论。这可能会帮助其他人。这是完整的代码
var http = require('http') // http module
, fs = require('fs') // file system module
, qs = require('querystring') // querystring parser
, mongoose = require('mongoose');
var appDataSchema = new mongoose.Schema({
record_id: Number,
app_version: Number,
imei: String,
created_time: Date,
device_uid: String,
model: String
});
var appDataModel = mongoose.model("app_data_collection", appDataSchema);
var PORT = 8080;
http.createServer(function(req, res) {
if (req.method == "POST") {
var POST = {};
//parse query string
req.on('data', function(data) {
data = data.toString();
data = data.split('&');
for (var i = 0; i < data.length; i++) {
var _data = data[i].split("=");
POST[_data[0]] = _data[1];
}
mongoose.connect("mongodb://localhost/app_data_db");
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
appDataModel.create({
record_id: POST["id"],
app_version: POST["app_version"],
imei: POST["imei"],
created_time: new Date((parseInt(POST["created_time"]) + 19800) * 1000), // to set correct time zone IST
device_uid: POST["device_uid"],
model: POST["model"]
}, function(err) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('saved to DB:' + POST["id"] + ''n');
console.log('saved to DB:' + POST["id"] + ''n');
mongoose.disconnect();
});
});
});
}
}).listen(PORT);
相关文章:
- 如何在 Mongoose/Mongodb 中创建查询以获取此 json
- Mongoose/MongoDB 结果字段在 Javascript 中显示为未定义
- 如何使用Mongoose/MongoDB直接插入JSON
- Mongoose mongodb保存子文档混乱?Mocha测试没有完成()
- 如何在Mongoose/MongoDB中正确构建数据库
- 如何从nodejs中的find返回,mongoose mongodb集合
- mongoose/mongodb查询从javascript数组中的每个发送方获取最后一个文档
- 添加到Mongoose MongoDB时过滤掉重复项
- Mongoose/MongoDb,如何针对另一个模型验证ID数组
- 是否有任何方法来识别在mongoose/mongoDB中更新/中断
- Mongoose / mongodb最好的统计方式
- Mongoose mongodb动态集合名称
- Mongoose - MongoDB - Express:在嵌入文档的3层深的字段中推送数据
- 在Openshift上运行MEAN网站时,非常奇怪的Mongoose/MongoDB问题
- 使用Node.js操作Mongoose/MongoDB数组
- 创建一个独立的用户模式,并使用 Mongoose/MongoDB 将其嵌入到消息模式中
- Mongoose/MongoDB -更新子文档不工作
- 在Mongoose / MongoDB中创建多字段(2个以上)索引
- 如何做一个“join”?在mongoose (mongodb)的数组上使用node.js
- AngularJS使用ng-model插入到Mongoose/MongoDB的数组中