Mongoose TypeError: Невозможно прочитать свойство 'googleID' из неопределенного - PullRequest
0 голосов
/ 18 октября 2018

Я делаю приложение, которое работает для отдельных пользователей.Я могу вставить данные в базу данных без идентификатора пользователя, но при попытке добавить идентификатор Google в схему и базу данных выдается ошибка типа.Что-то с моей схемой мангуста, похоже, сломано

TodoController.js

var bodyParser = require("body-parser");
var mongoose = require("mongoose");
const keys = require("../configs/keys");
const Todo = require("../models/todo-model")
//Connect to the database
mongoose.connect(keys.mongodb.tododbURL,() => {
    console.log("connected to mongodb server");
});

   

//var data = [{item:"get milk"}, {item:"walk nan"}, {item:"code for a bit"}];
var urlencodedParser = bodyParser.urlencoded({ extended: true });

const authCheck = (req, res, next) =>{
    if(!req.user){
        //executed if user isn't logged in
        res.redirect("/");
    } else {
        //if logged in
        next(); // fires to the next functionS
    }
};


module.exports = function(app){
    
    app.get("/todo", authCheck, function(req, res){
        //Get data from mongoDB andd pass through view
        Todo.find({}, function(err, data){
            if (err) throw err;
            res.render("todo", {todos:data});
        });
        console.log(req.user.googleID)
    });
    

    app.post("/todo", urlencodedParser,function(req, res){
        //get data from view and put it in the database
        var newTodo = Todo({item: req.body, googleID: req.user.googleID}).save(function(err, data){
            if (err) throw err;
            res.json(data);
        })
    });

    app.delete("/todo/:item", function(req, res){
        // delete requested item from the database
        Todo.find({item: req.params.item.replace(/\-/g, " ")}).remove(function(err, data){
            if(err) throw err;
            res.json(data);
        });
        
    });
};
req.user.googleID вернет что-то вроде 1374979743

todo-model.js

const mongoose = require("mongoose");


const todoSchema = new mongoose.Schema({
    todo: String,
    googleID: String 
});

const Todo = mongoose.model("Todo", todoSchema);
module.exports = Todo;
istening on port 3000
(node:2656) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
connected to mongodb server
connected to mongodb server
TypeError: Cannot read property 'googleID' of undefined

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

обнаружил проблему, я звонил req.body, а не req.body.item.Мне пришлось вызвать элемент, так как я теперь помещал два элемента в базу данных. Теперь это работает, и я понял, что на полпути через мой класс CS использовать одну базу данных

0 голосов
/ 18 октября 2018

Если user - это что-то, что вы отправляете в свой API внутри тела вашего запроса (я сделал это заключение, потому что я не вижу использования passportjs в вашем фрагменте кода), тогда вы получите эту ошибку, потому что вы используете req.user.googleIDвместо req.body.user.googleID.bodyParser анализирует JSON из тела вашего HTTP-запроса и помещает его в req.body.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...