【问题标题】:Node.js Express.js MongoDB: route.post() requires callback functions but got a [object Undefined]Node.js Express.js MongoDB:route.post() 需要回调函数,但得到了 [object Undefined]
【发布时间】:2018-07-03 11:31:14
【问题描述】:

我正在尝试设置 MEAN(mongodb、express、nodejs、angular6(CLI))应用程序。试图将用户注册表单数据发布到 mongo 数据库,但它会引发错误。这是我的第一个 MEAN 应用,正在努力学习。

我错过了什么吗?

错误:Route.post() 需要回调函数但得到了 [object Undefined]

server.js

这里是server.js 文件。

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/api.js)

我的路线文件夹./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;

型号

这是我的用户架构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');

【问题讨论】:

  • exports 不是 require() 返回的,在./server/routes/api.js 中使用module.exports.signup 代替exports.signup

标签: javascript node.js mongodb express


【解决方案1】:

您正在使用导出和 module.exports。 您应该遵循@dimagolovin 的回答 或者 module.exports = {路由器};

并使用

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

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

【讨论】:

    【解决方案2】:

    尝试更改./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};
    

    它应该做的工作

    【讨论】:

    • 我做了上述更改。现在我收到另一个错误。 Router.use() requires a middleware function but got a Object at function.use
    • 你能发布错误吗? @Arif Kahn 的建议也很好
    • 以上修改后,在server.js中使用app.use('/api', api.router);
    猜你喜欢
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多