2016-03-21 13 views
2

Ich habe den folgenden Code für node.js, Express und eine MongoDB-Verbindung mit Mungo.Wie CRUD-Operationen in Express?

Zuerst versuche ich eine einzelne Datei namens server.js und es funktioniert ohne Express. Aber jetzt möchte ich es in Express tun, aber es funktioniert nicht.

Es ist einfach Programm, lesen und erstellen Beispiel Bear Objekte in Mongo-Datenbank.

Hier ist meine 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'); 

//var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var mongoose = require('mongoose'); 
var db = mongoose.connect('localhost:27017/nodetest1'); 

//var Bear = require('./routes/users'); 


var app = express(); 

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

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

var port = process.env.PORT || 8080; 

// Make our db accessible to our router 
app.use(function(req,res,next){ 
    req.db = db; 
    next(); 
}); 

// ROUTES FOR OUR API 
// ============================================================================= 
var router = express.Router();    // get an instance of the express Router 

router.use(function(req,res,next){ 
    console.log('something is happening'); 
    next(); 
}); 

// test route to make sure everything is working (accessed at GET http://localhost:8080/api) 
router.get('/', function(req, res) { 
    res.json({ message: 'hooray! welcome to our api!' }); 
}); 

// more routes for our API will happen here 




// REGISTER OUR ROUTES ------------------------------- 
// all of our routes will be prefixed with /api 

app.use('/', router); 
app.use('/bears', users); 

// START THE SERVER 
// ============================================================================= 
app.listen(port); 
console.log('Magic happens on port ' + port); 


// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 


module.exports = app; 

und hier ist mein users.js

var express = require('express'); 
var router = express.Router(); 

var Schema = mongoose.Schema; 

var BearSchema = new Schema({ 
    name: String 
}); 

module.exports = mongoose.model('Bear',BearSchema); 


router.route('/bears') 

    // create a bear (accessed at POST http://localhost:8080/api/bears) 
    .post(function(req, res) { 

     var bear = new Bear();  // create a new instance of the Bear model 
     bear.name = req.body.name; // set the bears name (comes from the request) 

     // save the bear and check for errors 
     bear.save(function(err) { 
      if (err) 
       res.send(err); 

      res.json({ message: 'Bear created!' }); 
     }); 

    }); 
module.exports = router; 

Bitte sagen Sie mir, wie Sie die CRUD-Operationen zu routen.

+0

Bitte geben Sie an, welchen Fehler Sie konfrontiert sind. Bitte kommentieren Sie den Fehler hier? Also kann ich es debuggen. –

Antwort

2

Sie können nicht zwei module.exports in einer Datei haben. Der eine, der sich am Ende der Datei befindet, schreibt alle anderen neu.

Sie benötigen zwei Dateien, so etwas wie

Controller/users.js

var express = require('express'); 
var router = express.Router(); 

router.route('/bears') 

    // create a bear (accessed at POST http://localhost:8080/api/bears) 
    .post(function(req, res) { 

     var bear = new Bear();  // create a new instance of the Bear model 
     bear.name = req.body.name; // set the bears name (comes from the request) 

     // save the bear and check for errors 
     bear.save(function(err) { 
      if (err) 
       res.send(err); 

      res.json({ message: 'Bear created!' }); 
     }); 

    }); 
module.exports = router; 

Modelle/user.js

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

var BearSchema = new Schema({ 
    name: String 
}); 

module.exports = mongoose.model('Bear',BearSchema); 

In Ihrem app.js, können Sie dies tun:

var user = require('controllers/user'); 
app.use('/users', user); 

Es en dpoint hören jetzt bei /users/bears

Wenn Sie Ihr Modell irgendwo benötigen, laden Sie es einfach mit

var userModel = mongoose.model('User'); 

Ich würde empfehlen, dieses template herunterzuladen und auszuführen, ist es leichter ist, neue Features hinzuzufügen, wenn Sie sehen, wie sie bereits implementiert sind