简体   繁体   中英

Expressjs + Mongoose - This webpage is not available?

Why mongoose crashes the expressjs site?

Below is my code:

var express = require('express');
var mongoose = require('mongoose');
var app = express();

// Connect to mongodb
mongoose.connect("mongodb://localhost/testdb", function(err) {
    if (err) throw err;
    console.log("Successfully connected to mongodb");

    // Start the application after the database connection is ready
    app.listen(3000);
    console.log("Listening on port 3000");
});

// With Mongoose, everything is derived from a Schema. Let's get a reference to it and define our users.
var userSchema = mongoose.Schema({
    name: String,
    username: { type: String, required: true, unique: true },
    password: { type: String, required: true },
    admin: Boolean,
    location: String,
    meta: {
      age: Number,
      website: String
    },
    created_at: Date,
    updated_at: Date
});

// The next step is compiling our schema into a Model.
var User = mongoose.model('User', userSchema);

// Set route.
app.get("/", function(req, res) {

  //  We can access all of the user documents through our User model.
  User.find(function (err, users) {
    if (err) return console.error(err);
    console.log(users);
  })
});

I get this on browser:

This webpage is not available

But in my terminal I get the result:

Successfully connected to mongodb
Listening on port 3000

[ { _id: 57682f69feaf405c51fdf144,
    username: 'testuser1',
    email: 'testuser1@testdomain.com' },
  { _id: 57683009feaf405c51fdf145,
    username: 'testuser2',
    email: 'testuser2@testdomain.com' },
  { _id: 57683009feaf405c51fdf146,
    username: 'testuser3',
    email: 'testuser3@testdomain.com' }]

Any ideas what I have missed?

The problem is that you are not writing anything in the response object in your request handler. Therefore the browser keeps waiting for the request to finish and ends up with a timeout. In your app.get(), you can update the response like this:

// Set route.
app.get("/", function(req, res) {

  //  We can access all of the user documents through our User model.
  User.find(function (err, users) {
    if (err) {
        console.error(err);
        // some simple error handling, maybe form a proper error object for response.
        res.status(500).json(err);
    }
    console.log(users);
    res.status(200).json(users);  // setting the object as json response

    //OR

    // res.end();   if you don't want to send anything to the client
  })
});

or something similar.

Refer the Express documentation for more details: http://expressjs.com/en/api.html#res

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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