簡體   English   中英

我可以顯示MongoDB集合中的所有項目,但無法保存到其中:“未定義”

[英]I can display all items in my MongoDB collection, but can't save to it: “undefined”

我是Node.js的新手,目前,我正在嘗試制作一個問答應用程序,以下功能與我的問題以及我要做的事情有關。

  • 列出來自MongoDB的所有討論(可行)。

  • 通過Mongodb的表單添加有關屬性的討論:作者,標題,正文。

  • 創建新討論后,將重定向到新進行討論的詳細頁面。

這是我的MongoDB結構:mongodb:// localhost / Diskussrdb

收藏的名稱是“討論”。

當前,我能夠在localhost:3000 / discussions上查看所有數據庫記錄

用於創建新討論的表單的頁面位於localhost:3000 / discussions / create

修正:但是,按/ create頁面上的提交按鈕不會執行任何操作。 我一直盯着自己在線上的教程盲目,但找不到任何可以幫助我的東西。

修正:新問題:提交現在可以使用,但是在地址“ localhost:3000 / submit”上返回404。 我在/ submit router.post中添加了console.log,但是它沒有顯示在提示中。

提交工作正常,並轉到LH:3000 / discussions / submit,但似乎我的應用無法找到我的收藏集。 但是,LH:3000 / discussions列出了我MongoDB中當前的所有項目(Diskussr,集合:討論),因此必須以某種方式正確鏈接。

集合的console.log也返回“ undefined”。 這是錯誤:“無法調用未定義的方法'插入' **

這些是我的代碼文件:

forums.js-/路線

    var mongoose = require('mongoose');
var express = require('express');
var router = express.Router();
var Discussion = require('../models/discussions');

router.get('/', function(req, res, next){

    // alle db records uitlussen, op render alldiscussions
    var db = req.db;
    Discussion.find({},{},function(e,docs){
        res.render('all_discussions', {
            "all_discussions" : docs
        });
        console.log(docs);
    });
});

router.get('/create', function(req, res, next){
    res.render('add_discussion', {title: 'Diskussr'});

});

router.post('/submit', function(req, res) {

    //set DB
    var db = req.db;

    //form vals
    var author = req.body.name;
    var title = req.body.title;
    var body = req.body.body;

    //set collection
    var collection = db.get('discussions');

    //insert
    collection.insert({
        "author" : author,
        "title" : title,
        "body" : body
    }, function (err, doc) {
        if (err) {
            res.send("Database submit error");
        }
        else {
            res.location("all_discussions");
            res.redirect("all_discussions");
        }
    });

});

module.exports = router;

add_discussion.jade-/ views

extends layout

block content
  h1 Start a discussion
  p Start a discussion here on #{title} and help eachother out.
  p Voeg hier uw vraag in:
  form(action="/submit" method="post" name="submit_discussion")
  input(id="name", placeholder="Your name" name="name")
  br
  br
  input(id="title", placeholder="Brief summary of your problem." name="title")
  br
  br
  input(id="body", placeholder="Explain your problem." name="body")
  br
  br
  button(type="sumbit" id="submit" value="submit") Submit
  br

forums.js-/模型

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

//schema discussions
var DiscussionSchema = new Schema({
    author: String,
    title: String,
    body: String,
    category: String,
    created: Date
},
{ collection : 'discussions' });

// model
var Discussion = mongoose.model('Discussion', DiscussionSchema, 'discussions');

// test functie: aanmaken vraag on load
// var firstDiscussion = new Discussion({author: "Testuser 1", title: "Testvraag via models"});
// console.log(firstDiscussion);

// //vraag saven
//  firstDiscussion.save(function (err, firstDiscussion){
//      if (err) return console.error(err);
//  });





module.exports = Discussion;

我的講師告訴我將其發布到StackOverflow,因為他不願意親自幫助我。

Jade對空格敏感,如果您希望html元素包含在另一個元素(例如表單標簽)中,則需要縮進它們。

block content
  h1 Start a discussion
  p Start a discussion here on #{title} and help eachother out.
  p Voeg hier uw vraag in:

  form(action="/submit" method="post" name="submit_discussion")
      input(id="name", placeholder="Your name" name="name")
      br
      br
      input(id="title", placeholder="Brief summary of your problem." name="title")
      br
      br
      input(id="body", placeholder="Explain your problem." name="body")
      br
      br
      button(type="sumbit" id="submit" value="submit") Submit
      br

我建議使用調試器。 要立即查看發生了什么,您可以將控制台輸出添加到router.post以檢查它實際上是否在被調用,如下所示:

router.post('/submit', function(req, res) {
    console.log("POST received");
    // etc
}

進一步調試:

在路由器上方app.js中的任何位置添加此app.use()代碼。

app.use(function(req, res, next) {
    console.log("Received: " + req.method + " at " + req.originalUrl);
    next();
});

每當您的應用收到請求時,就會調用該方法,然后調用next();。 移動到您的路由器。 這樣您將看到:

收到:/ create處的GET

收到:POST在/ submit

數據庫問題

數據庫查詢的問題是您需要在“討論”上調用insert,而不是db.collection.get('Discussion');。

嘗試:

Discussion.insert({
    "author" : author,
    "title" : title,
    "body" : body
}, function (err, doc) {
    if (err) {
        res.send("Database submit error");
    }
    else {
        res.location("all_discussions");
        res.redirect("all_discussions");
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM