关键错误插入到MongoDB使用node.js失败的一些对象没有任何键包含一个点
Key error inserting to MongoDB using node.js fail for some objects with out any key containing a dot?
我有一个使用 Angular JS
绑定的web表单,并通过POST调用我的服务器代码中的路由,通过使用mongodb连接将插入到mongodb集合。
我尝试插入的对象是一个有效的Java Script对象,实际上,有时它只是插入ok,但有时Mongo会抱怨一个键包含一个点
这是Angular控制器内部的AJAX调用(它总是通过):
$.ajax({
type:"POST",
url:"/psychos",
data:JSON.stringify(this.psycho)
})
路由处理代码:
app.post("/psychos", function(request, response) {
var psychologist = request.body
console.log("We got via AJAX'n"+JSON.stringify(psychologist, undefined, 2))
psicologosCollection.insert(psychologist, function(error, responseFromDB) {
if (error) {
console.log(error)
response.send(responseFromDB)
}
else {
console.log("Se ha insertado: "+ JSON.stringify(responseFromDB))
response.send(responseFromDB)
}
})
})
我的服务器代码管理Passport认证,路由是在MongoDB连接上定义的。
这是我的整个服务器代码:
var express = require('express')
var mongodb = require('mongodb')
var mongoose = require('mongoose')
var bodyParser = require('body-parser')
var cookie = require('cookie-parser')
var connect = require('connect')
var passport = require('passport')
//var flash = require('connect-flash')
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var LocalStrategy = require('passport-local').Strategy;
var app = express()
var BSON = mongodb.BSONPure
app.use(express.static(__dirname+"/public"))
app.use(bodyParser())
app.use(cookie())
app.use(connect.session({ secret: 'ilovescotchscotchyscotchscotch' }));
app.use(passport.initialize());
app.use(passport.session());
//app.use(flash())
var MongoDBClient = mongodb.MongoClient
mongoose.connect('mongodb://localhost/psicologosTuxtepecDB')
var Schema = mongoose.Schema
var userCredential = new Schema({
username: String,
password: String
}, {
collection: 'members'
})
var userCredentials = mongoose.model('members', userCredential)
app.use(session({
secret: 'ziKologiia',
clear_interval: 900,
cookie: { maxAge: 2 * 60 * 60 * 1000 },
store: new MongoStore({
db : mongoose.connection.db
})
}));
passport.serializeUser(function(user, done) {
done(null, user);
})
passport.deserializeUser(function(user, done) {
done(null, user);
})
passport.use(new LocalStrategy(function(username, password, done) {
process.nextTick(function() {
userCredentials.findOne({
'username': username,
}, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false);
}
if (user.password != password) {
return done(null, false);
}
return done(null, user);
});
});
}));
MongoDBClient.connect("mongodb://localhost/psicologosTuxtepecDB", function (error, psicologosTuxtepecDB) {
if (error) {
console.log("We've got a connection error, so far we should take this function better for a correct debug")
}
else {
console.log("Connection to psicologosTuxtepecDB has been successful")
var psicologosCollection = psicologosTuxtepecDB.collection("psychologists")
app.get('/registro', function(request,response) {
if(request.isAuthenticated())
response.sendfile("public/html/registro.html")
else
response.redirect('/')
})
app.post("/psychos", function(request, response) {
var psychologist = request.body
console.log(psychologist)
psicologosCollection.insert(psychologist, function(error, responseFromDB) {
if (error) {console.log(responseFromDB);response.send(responseFromDB)}
console.log("Se ha insertado: "+ JSON.stringify(responseFromDB))
response.send(responseFromDB)
})
})
app.get("/psychos/:id", function(request, response) {
var id = new BSON.ObjectID(peticion.params.id)
psicologosCollection.findOne(
{'_id':id},
function(error,responseFromDB) { if (error) {response.send(responseFromDB)} response.send(responseFromDB)}
)
})
app.get("/psychos", function(request,response) {
psicologosCollection.find().toArray(function(error,responseFromDB) {
if (error) {response.send(responseFromDB)}
response.send(responseFromDB)
})
})
app.post('/login',
passport.authenticate('local', {
successRedirect: '/loginSuccess',
failureRedirect: '/loginFailure'
})
)
app.get('/loginFailure', function(req, res, next) {
res.redirect('/')
})
app.get('/loginSuccess', function(req, res, next) {
res.redirect('/registro')
})
app.get('/logout', function (request, response){
request.session.destroy(function (err) {
response.redirect('/'); //Inside a callback… bulletproof!
})
})
app.listen(2311, function () {
console.log("app escuchando en el puerto Maricela fecha de nacimiento DDMM")
})
}
})
为了防止我展示我的Angular JS文件:
(function() {
var app = angular.module('PsicologosRegister', ['checklist-model'])
app.controller('PsicologoController', function($scope) {
this.psycho = psicologo
this.print = function() {
console.log(this.psycho)
}
this.toMongo = function() {
$.ajax({
type:"POST",
url:"/psychos",
data:JSON.stringify(this.psycho)
})
}
})
app.controller('PersonalDataController', function() {
this.data = datos_Personales
})
app.controller('ProfessionalDataController', function() {
this.data = datos_Profesionales
})
app.controller('ProfessionalInterestsController', function() {
this.data = intereses_Profesionales
this.print = function() {
console.log(this.psycho)
}
})
app.controller('PosgraduateController', function() {
this.degrees = [
'Especialidad',
'Maestría',
'Doctorado'
]
this.postgraduates = _postgraduates
this.addPostgraduate = function() {
this.postgraduates.push({})
}
})
app.controller('WorkController', function() {
this.works = _works
this.addWork = function() {
this.works.push("")
}
})
app.controller('FreelanceController', function() {
this.freelances = _freelances
this.addFreelance = function() {
this.freelances.push("")
}
this.noFreelance = function() {
this.freelances = [""]
}
})
app.controller('NoPsychoWorkController', function() {
this.noPsychoWorks = _noPsychoWorks
this.addNoPsychoWork = function() {
this.noPsychoWorks.push("")
}
this.notNoPsychoWorks = function() {
this.noPsychoWorks = [""]
}
})
app.controller('TrainingTopicsController', function() {
this.trainingTopics = _trainingTopics
this.add = function() {
this.trainingTopics.push("")
}
})
app.controller('GroupsController', function() {
this.groups = _groups
this.add = function() {
this.groups.push("")
}
this.doesntBelongToAnywhere = function() {
this.groups = [""]
}
})
var _noPsychoWorks = [""]
var _freelances = [""]
var _works = [""]
var _postgraduates = [{}]
var _trainingTopics = [""]
var _groups = [""]
var _events = [{}]
var datos_Personales = {}
var datos_Profesionales = {postgraduates:_postgraduates, works: _works, freelances:_freelances, noPsychoWorks:_noPsychoWorks}
var intereses_Profesionales = {events:_events,groups:_groups,trainingTopics:_trainingTopics}
var psicologo = {
datosPersonales: datos_Personales,
datosProfesionales: datos_Profesionales,
interesesProfesionales: intereses_Profesionales
}
})()
<标题> 例子这是一个失败的
We got via AJAX
{
"{'"datosPersonales'":{'"name'":'"Maricela'",'"lastname'":'"Aguilar'",'"age'":'"22'",'"phone'":'"2878710097'",'"mobile'":'"2878812505'",'"email'":'"af05_@hotmail.com'",'"address'":'"Carranza 168 Int 2'"},'"datosProfesionales'":{'"postgraduates'":": {
"{'"degree'":'"Especialidad'",'"title'":'"Amor'",'"cedula'":'"ASFAS5'"},{'"degree'":'"Maestría'",'"title'":'"Romance'",'"cedula'":'"FAS15'"}],'"works'"": {
"'"Universidad Hispano'"],'"freelances'"": {
"'"Asociación Psicólogos'"],'"noPsychoWorks'"": {
"'"'"],'"almaMater'":'"BUAP'",'"course'":'"1987'",'"cedula'":'"SAFS555FSA'",'"workAreas'"": {
"'"Clínica'",'"Laboral'"],'"freelance'":'"true'",'"noPsychoWork'":'"false'"},'"interesesProfesionales'":{'"events'"": {
"{}],'"groups'"": {
"'"Asociación de Psicólogos de Tuxtepec'",'"Club de Toby'"],'"trainingTopics'"": {
"'"Real Madrid'",'"Cocina'"],'"activities'"": {
"'"Conferencias y encuentros'",'"Talleres'"],'"trainingAreas'"": {
"'"Educativa'"],'"belongsToSomewhere'":'"true'",'"hasParticipated'":'"true'",'"wantsToBelong'":'"true'",'"whyToBelong'":'"Futuro'"}": ""
}
}
}
}
}
}
}
}
}
}
}
[Error: key {"datosPersonales":{"name":"Maricela","lastname":"Aguilar","age":"22","phone":"2878710097","mobile":"2878812505","email":"af05_@hotmail.com","address":"Carranza 168 Int 2"},"datosProfesionales":{"postgraduates": must not contain '.']
We got via AJAX
{
"{'"datosPersonales'":{'"name'":'"Pepe'",'"lastname'":'"Guitérrez Javier'",'"age'":'"8755'",'"phone'":'"2252'",'"mobile'":'"555'"},'"datosProfesionales'":{'"postgraduates'":": {
"{}],'"works'"": {
"'"UYAQ'"],'"freelances'"": {
"'"AFSFSA'"],'"noPsychoWorks'"": {
"'"fsafas'",'"fsad'",'"fasd'"],'"almaMater'":'"BUAP'",'"course'":'"1998'",'"cedula'":'"FSA44'",'"workAreas'"": {
"'"Clínica'",'"Social'"],'"freelance'":'"true'",'"noPsychoWork'":'"true'"},'"interesesProfesionales'":{'"events'"": {
"{}],'"groups'"": {
"'"fdsfds'"],'"trainingTopics'"": {
"'"dsfds'",'"fds'"],'"activities'"": {
"'"Conferencias y encuentros'",'"Talleres'"],'"trainingAreas'"": {
"'"Social'"],'"belongsToSomewhere'":'"true'",'"hasParticipated'":'"true'",'"wantsToBelong'":'"true'",'"whyToBelong'":'"fdsfds'"}": ""
}
}
}
}
}
}
}
}
}
}
}
不应该得到.
的是什么
我不确定,也没有时间深入研究您的代码,但是mongodb写失败有时与写问题有关:http://docs.mongodb.org/manual/core/write-concern/
希望对大家有帮助
相关文章:
- 如何在创建键时引用来自同一对象的键
- 访问嵌套JSON对象的键,其中键是动态的
- 如何在php中读取没有任何键的JSON数组
- 数组作为javascript中对象的键
- JS/ANGULAR使用一个变量's值作为另一个对象的键
- Javascript:使用一个预先存在的对象值作为一个新对象的键
- 识别值是否与 jqGrid 数据中的任何键匹配的正确方法是什么?
- jQuery对象通过键获取值
- 当对象的键中有冒号时,如何访问对象属性
- Javascript,Undercore试图返回具有最高值的对象的键
- 如何在Javascript中对属于对象的键中的多个值进行分组
- 获取for in循环中对象的名称,用作另一个对象的键
- JSON对象作为键值对中的键
- 使用动态变量作为多维对象的键
- 向分析对象中的对象添加键
- 替换jquery对象中键的值
- 试图访问作为字符串的对象文字键
- JSON 响应对象:“漂亮”键和较大的响应或短键和较小的响应
- 迭代整个JSON对象而不知道任何键
- 关键错误插入到MongoDB使用node.js失败的一些对象没有任何键包含一个点