简体   繁体   中英

Node.js Express.js MongoDB: route.post() requires callback functions but got a [object Undefined]

I am trying to set up a MEAN (mongodb, express, nodejs, angular6(CLI)) app. Trying to post user signup form data to mongo database, but its throwing an error. It is my first MEAN app, trying to learn.

Do I miss something here?

Error: Route.post() requires callback functions but got a [object Undefined]

server.js

Here is server.js file.

 var express = require('express'); var bodyParser = require('body-parser'); var path = require('path'); var http = require('http'); var app = express(); var api = require('./server/routes/api'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false})); app.use(express.static(path.join(__dirname + '/dist/meanshopcart'))); app.use('/api', api); app.post('/sign-up', api.signup); app.get('*', function(req, res) { res.sendFile(path.join(__dirname, '/dist/meanshopcart/index.html')); }); var port = process.env.PORT || '3000'; app.set('port', port); var server = http.createServer(app); //app.listen(port, function(){ // console.log("Server is running..!!"); //}); server.listen(port, function(err){ if(err){ return console.log('something bad happened', err); } console.log("Server is running..!!"); }); 

Routes Folder(routes/api.js)

my routes folder ./server/routes/api.js

 var express = require('express'); var router = express.Router(); const mongoose = require('mongoose'); const User = require('../models/users'); const db = 'mongodb://localhost:27017/meanshopapp'; mongoose.connect(db, function(err){ console.log("mongo connection done"); if(err){ console.log("Error.."+err); } }); router.get('/', (req, res)=>{ console.log("get api "); User.find({}, function(err, users) { if (err) throw err; // object of all the users console.log(users); }); res.send(users); }); exports.signup = function(req, res, next){ console.log("new user entered"); var newUser = new User(); newUser.name = req.body.name; newUser.email = req.body.email; newUser.password = req.body.password; newUser.phoneNo = req.body.phone; newUser.address = req.body.address; newUser.save(function(err){ if(err){ console.log("error saving user"); } else{ console.log("user inserted"); } }) }; module.exports = router; 

Model

this is my user schema user.js

 const mongoose = require('mongoose'); const Schema = mongoose.Schema; const userSchema = new Schema({ name : { type: String }, email: { type: String, required: true, unique: true }, password: { type: String, required: true }, phoneNo: { type: Number }, address: { type: String } }); module.exports = mongoose.model('user', userSchema, 'users'); 

Try to change the follwing in ./server/routes/api.js

function signup(req, res, next){
console.log("new user entered");

var newUser = new User();
newUser.name = req.body.name;
 newUser.email = req.body.email;
 newUser.password = req.body.password;
 newUser.phoneNo = req.body.phone;
 newUser.address = req.body.address;

newUser.save(function(err){
    if(err){
        console.log("error saving user");
    }
    else{
        console.log("user inserted");
    }
  })
};

module.exports = {router, signup};

It should do the work

You are using exports and module.exports. Either you should follow @dimagolovin's answer OR module.exports = {router};

and use

`app.use('/api', api.router);

app.post('/sign-up', api.signup);`

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