Mongodb / mongoose只保存一次然后创建500错误

时间:2015-08-09 09:15:46

标签: javascript node.js mongodb express mongoose

我将json发送到我的node.js / express app并收到发送的数据 并做我想做的事,但只做一次。

我启动appjs后第一次将200的请求保存到我的mongodb。我可以在数据库和控制台日志中看到数据。但是在任何后续的POST中我得到500.

这是该路线的代码

var express = require('express');
var phone = require('../models/phonedata-api');
var router = express.Router();
var bodyParser = require('body-parser');
router.use(bodyParser.json()); // support json encoded bodies
router.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

router.post('/api/phone-data', function(req, res) {

	phone = new phone();
	phone.loc = req.body.loc;
	phone.battery = req.body.battery;
	phone.signal = req.body.signal;
	phone.phonedate = req.body.phonedate;
	phone.day_of_month = req.body.dom;
	phone.save(function(err) {
	if(err) 
		res.send(err); 
		})

    res.send('Phone data recived successfully');
    console.log(req.body);
});

module.exports = router;

我的数据库模型/架构。

// /models/phonedata-api.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var phoneSchema = new Schema({
		loc: String,
		battery:    String,
		signal: String,
		phonedate: String,
		day_of_month: String,
		date: { type: Date, default: Date.now },
});

var phone = mongoose.model('phone', phoneSchema);

module.exports = phone;

{ "battery": "72",
  "signal": "-12",
  "phonedate": "09-08-2015",
  "dom": "9",
  "loc": "52.05351615,1.12653186" }

我的控制台日志是。

> pukkapi@1.2.0 start /home/pi/Dev_work/pukkapi
> node ./bin/www

{ battery: '72',
  signal: '-1',
  phonedate: '09-08-2015',
  dom: '9',
  loc: '52.05351615,1.12653186' }
POST /admin/api/phone-data 200 29.914 ms - 31
POST /admin/api/phone-data 500 595.693 ms - 4723

我在这里做错了什么,我是否想要关闭以前的连接?任何指针都是如此,我们将不胜感激。

非常感谢。

3 个答案:

答案 0 :(得分:0)

问题出在以下几行:

phone = new phone();

您正在导入模块../models/phonedata-api并将其分配到文件顶部的新变量phone,然后您正在使用该类创建实例并分配它回到同一个变量。因此,下次调用路径时变量phone不再是函数,它就是对象的实例。尝试在路线中创建新变量,而不是重复使用phone

答案 1 :(得分:0)

会尝试类似

的内容
new phone(req.body).save(function(err) {...

以避免为var phone分配新值

答案 2 :(得分:0)

好, 所以我同意上面两条评论,这是你可以做些什么来解决你的问题。

  • 第一件事:不要重新分配任何变量。使用另一个变量名称。使用 const
  • 此外,您首先要创建新的模式实例,然后为它们分配值,而不是将对象作为参数发送到模式构造函数,以便它将使用您的值生成模式实例。

    const express = require('express'); const phone = require('../ models / phonedata-api'); const router = express.Router(); const bodyParser = require('body-parser'); router.use(bodyParser.json()); //支持json编码的主体 router.use(bodyParser.urlencoded({extended:true})); //支持编码的主体

    router.post('/ api / phone-data',function(req,res){

     let data = {
        loc:req.body.loc,
        battery:req.body.battery, signal:req.body.signal, 
        phonedate:req.body.phonedate,
        day_of_month: dom
        }
    
    
    var phoneItem = new phone(data);
    
    phoneItem .save(function(err) {
    if(err) 
        res.send(err); 
        })
    
    res.send('Phone data recived successfully');
    console.log(req.body);
    });
    
    module.exports = router;
    

希望这能解决你的问题。