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

Mongodb/mongoose only saving once then creating 500 error

本文关键字:一次 然后 创建 错误 500个 mongoose 保存 Mongodb      更新时间:2023-09-26

我正在发送json到我的node.js/express应用程序,它接收发送的数据做我想让它做的事,但只有一次。

在我启动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

我在这里做错了什么,我错过了像关闭以前的连接之类的东西吗?如有任何建议,我将不胜感激。

多谢。

问题出在下面一行:

phone = new phone();

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

我会试试

new phone(req.body).save(function(err) {...

避免var phone被赋值为新值

所以我同意上面的两个意见,下面是你可以做的来解决你的问题。

    第一件事:不要重新分配任何变量。使用另一个变量名。使用 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}));//支持编码正文

    路由器。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;
    

希望这能解决你的问题