Mongodb/mongoose只保存一次,然后创建500个错误
Mongodb/mongoose only saving once then creating 500 error
我正在发送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;
希望这能解决你的问题
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 设置随机数,然后每5秒随机减少一次,直到达到0(javascript)
- 显示数字,然后每5秒随机更改一次(javascript)
- 单击时预置图像 - 仅预置一次,然后停止
- 如何每 10 秒调用一次 JS 函数,然后以角度激活一个函数
- 为什么这个脚本只工作一次?只替换元素一次,然后再也不替换
- 做一件事,然后在react js中每隔15秒做一次
- 地图,rails 4.2,javascript,鼠标悬停,只工作一次(或两次).然后在重新加载之后
- 一次选中4个复选框,然后将页面重定向到新页面
- 其中是在ReactJS中放置一个值的最佳位置,该值由传入的初始参数计算一次,然后再也不会更改
- Flickity gallery - 如何循环浏览一次然后停止自动播放
- 引导 2 轮播循环一次,然后停止
- 如何使函数在 2 分钟后执行,然后每隔 2 分钟执行一次
- Javascript 这个关键字在原型函数中的递归执行一次,然后未定义
- 调用函数一次,然后设置间隔
- 然后,Jquery 加载内容每 2 秒刷新一次
- jQuery事件触发一次,然后再也不会触发
- 如何只运行一个函数一次,然后运行另一个依赖于相同元素的函数
- 在所有地方重复$(),或者声明一次然后重用