我将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
我在这里做错了什么,我是否想要关闭以前的连接?任何指针都是如此,我们将不胜感激。
非常感谢。
答案 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 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;
希望这能解决你的问题。