简体   繁体   English

无法获得要显示的mongoDB数据

[英]Can't get mongoDB data to be displayed

Before I begin, I am very new to all of this.. Taking a class, and this is confusing me alot. 在开始之前,我对所有这些都是新手。上一堂课,这让我很困惑。 I have looked around at a lot of tutorials so I may have some random stuff in this code. 我看了很多教程,所以这段代码中可能有一些随机的东西。

I am using Node.js, Mongodb, Mongoose, express, my views are in jade format 我正在使用Node.js,Mongodb,Mongoose,Express,我的视图是翡翠格式

My problem currently is, I currently have it so my entry.jade page is submitting data to my MongoDB database, Which seems to be working. 我目前的问题是,我现在有它,所以我的entry.jade页面正在向我的MongoDB数据库提交数据,这似乎正在工作。 I then want it to display on listing page. 然后,我希望它显示在列表页面上。

However, I am getting stuck on displaying that data from the database. 但是,我一直无法显示数据库中的数据。 I am trying to display the data on listing.jade. 我正在尝试在listing.jade上显示数据。 I'm not sure if I am just missing something in listing.jade? 我不确定我是否只是在listing.jade中缺少什么? Not entirely sure. 不太确定。

I apologize if it isn't really organized or have weird stuff in here. 如果这不是真的井井有条或有怪异的内容,我深表歉意。 Any help is much appreciated! 任何帮助深表感谢!

Here is my code: 这是我的代码:

App.js: App.js:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');

mongoose.connect('mongodb://localhost/inventoryproject');
let db = mongoose.connection;

// Check connection
db.once('open', function(){
  console.log('Connected to MongoDB')
});

//Check For DB errors
db.on('error', function(){
  console.log(err);
});

const entryRouter = require("./routes/entry");
const publicRouter = require("./routes/public");
const listingRouter = require("./routes/listing");
const updateRouter = require("./routes/update");
const deletionRouter = require('./routes/deletion');


// Init App
var app = express();

// Bring in Models
let Listing = require('./models/Listing');

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/css',express.static(__dirname +'/css'));
app.use(express.static('routes'));
app.use('/', publicRouter);
app.use('/entry', entryRouter);
app.use('/listing', listingRouter);
app.use('/update', updateRouter);
app.use('/deletion', deletionRouter);

app.get('listing', function(req, res){
  return listing.find({}, function(err, listings){
    if(err){
      console.log(err);
    } else {
      res.render('listing', {
        });
    };
  });
});


//Add Submit POST route
app.post('/listing', function(req, res){
  let listing = new Listing();
  listing.productname = req.body.productname;
  listing.partnumber = req.body.partnumber;

  listing.save(function(err){
    if(err){
      console.log(err);
      return;
    } else {
      res.redirect('/listing');
    }
  });
});

app.get('inventory', function(req, res, next){
  var resultArray = [];
  mongo.connect(url, function(err, db) {
    assert.equal(null, err);
    var cursor = db.collection('listings').find();
    cursor.each(function(doc, err) {
      assert.equal(null, err);
      resultArray.push(doc);
    }, function(){
      db.close();
      res.render('/listing', {items: resultArray});
    });
  });
});

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

My models folder / Listing.js : 我的模型文件夹/ Listing.js:

let mongoose = require('mongoose');

// Listing Schema
let listingSchema = mongoose.Schema({
  productname:{
    type: String,
    required: true
  },
  partnumber:{
    type: String,
    required: true
  },

});
let Listing = module.exports = mongoose.model('Listing',listingSchema);

Routes folder my listing.js : 路由我的listing.js文件夹:

const express = require("express");
const mongo = require('mongodb').MongoClient;
const assert = require('assert');

const url = 'mongodb://localhost/inventoryproject';

const router = express.Router();

// Listing
router.get("/", (req, res) => {
  res.render("listing");
});

//Trying to push data to page
router.get('/', function (req, res) {
    var MongoClient = require('mongodb').MongoClient
    var url = 'mongodb://localhost/inventoryproject';
    var results_from_mongo = [];
    MongoClient.connect(url, function (err, db) {
        var str = db.collection('inventory').find();
        str.each(function (err, doc) {
                console.log(doc);
                results_from_mongo.push(doc);
        });
        res.render('listing', {"results": results_from_mongo });
    });
});

module.exports = router;

Views folder with listing.jade Views文件夹,包含listing.jade

doctype html
html(lang='en-US')
  head
    meta(charset='utf-8')
    meta(http-equiv='X-UA-Compatible')
    meta(name='viewport', content='width=device-width, initial-scale=1')
    title Inventory Project
    link(rel='stylesheet', type='text/css', href='/css/singlePageTemplate.css')
  body
    // Main Container
    .container
      // Navigation
      header
        a(href='')
          h4.logo ASTRO PARTS
        nav
          ul
            li
              a(href='/') HOME
            li
              a(href='/entry') PRODUCT ENTRY
            li
              a(href='/update') PRODUCT UPDATE
            li
              a(href='/deletion') PRODUCT DELETION



      // Hero Section
      section#hero.hero
        h2.hero_header PRODUCT LISTING


      // Footer Section
      section#contact.footer_banner
        h2.hidden Footer Banner Section 
      // Copyrights Section
      .copyright
        | ©2019 - 
        strong ASTRO Parts
    // Main Container Ends

The port number must be a part of connection string itself. port必须是连接字符串本身的一部分 So in your case, the connection string becomes 因此,在您的情况下,连接字符串变为

mongodb://localhost:27017/inventoryproject

Default for MongoDB is to run on port 27017 (unless changed otherwise) MongoDB的默认设置是在端口27017上运行(除非另行更改)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM