[英]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.