使用node.js插入到MongoDB的重要错误对于某些没有包含点的键的对象会失败?
我有一个使用Angular JS
绑定的web表单,并通过POST调用我的服务器代码中的路由,通过使用mongodb连接将插入到MongoDB colllection。
我试图插入的对象是一个有效的Java脚本对象,有时它只是插入确定,但有时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) } }) })
我的服务器代码pipe理Passport身份validation,并在MongoDB连接上定义roten。
这是我的整个服务器代码:
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\"}": "" } } } } } } } } } } }
什么是不应该得到的.
?
我不确定,也没有时间深入研究代码,但是mongo db写入失败有时会连接到Write Writens: http : //docs.mongodb.org/manual/core/write-concern /
希望有帮助。
- AngularJS $ http.delete和$ window.location.reload()
- angular度选项HTTP预检“同一域”?
- Heroku和angular度路由
- 为什么在MEAN应用程序的每个请求中授权头返回undefined
- 用Angular,Express和Jade刷新特定页面(使用html5mode)
- 使用grunt-obfuscator混淆js文件:未捕获ReferenceError:require未定义
- AngularJS – 视图不会在我的浏览器中呈现?
- Javascript ES6最佳实践,variables实例化
- 使用angularjs / javascript将JSON对象传递给服务器