MEAN Stack 出现 500 错误

500 error with MEAN Stack

我目前正在使用 MEAN 堆栈开发一个简单的项目。我正在尝试连接到 Mongo 数据库。在我尝试将数据放入我的 index.ejs 文件之前,一切似乎都正常。这是我的代码:

型号:

var mongoose = require('mongoose');

//mongoose Schema 

var personSchema = new mongoose.Schema({
    firstname: {type: String, required: true},
    lastname: {type: String, required: true},
    homeworld: String
});

//compiling into model 
module.exports = mongoose.model("Person", personSchema);

Index.js 在路线文​​件夹中:

var express = require('express');
var router = express.Router();
var Person = require("../models/person");

router.get('/', function(req, res, next) {
  Person.find({}, function(err, persons) {
    if(err){
      console.log("ERROR!");
    } else {
     res.render('index', { persons: persons });
   }
 })
});

app.js 文件(请注意,这只是上半部分,是我稍作改动的部分):

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
require('./app_server/models/db');
var routes = require('./app_server/routes/index');
var users = require('./app_server/routes/users');
var Person = require("./app_server/models/person");
var mongoose = require('mongoose');

var app = express();

//Connecting to mongo DB
mongoose.connect("mongodb://localhost/learn2A");

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

这是我的 index.ejs 页面:

<h1>Home Page</h1>

<h4>Database Items Here:</h4>
<!-- Looping through each entry in the database -->
<% persons.forEach(function(person) { %>
  <p><%= person.firstname %></p>
  <p><%= person.lastname %></p>
<% }) %>

在我进入 index.ejs 页面之前,一切都连接正常并且工作正常。然后我没有收到错误,但在我的控制台上显示:

获取/500 23.966 毫秒 - 35

如果我去掉以下所有行:

<% persons.foreach(function(person) { %>
  <p><%= person.firstname %></p>
  <p><%= person.lastname %></p>
<% }) %>

然后我的 index.ejs 页面加载正常。

我的文件夹结构如下所示:

app_server
    models
      person.js
    routes
      index.js 
    views 
      error.ejs
      index.ejs
 app.js

最后,我知道数据库在 mongo 端工作 - 我在那里有一个条目并且可以看到它。如果需要更多信息,请告诉我。感谢您的帮助。

像这样更改您的代码:

indes.js

var express = require('express');
var router = express.Router();
var Person = require("../models/person");

router.get('/', function(req, res, next) {
  Person.find({}, function(err, persons){
    if(err){
      console.log("ERROR!");
    }else {
     res.render('index', { persons: persons });
   }
 })
});

index.ejs

<h1>Home Page</h1>

<h4>Database Items Here:</h4>
<!-- Looping through each entry in the database -->
<% persons.forEach(function(person){ %>
  <p><%= person.firstname %></p>
  <p><%= person.lastname %></p>
<% }) %>

我找到了我自己问题的答案。解决方案是我将与 mongo 数据库的连接放置在当前模型的文件中。它在 app.js。所以这一行:

//Connecting to mongo DB
mongoose.connect("mongodb://localhost/learn2A");

已从 app.js 移至模型文件夹,并且已建立连接并且一切正常。