【问题标题】:How to post data from module.exports in node.js如何在 node.js 中从 module.exports 发布数据
【发布时间】:2026-01-24 19:10:01
【问题描述】:

我正在尝试获取用户输入并将其保存到我的数据库中的集合中。我正在使用 Node.js、mongodb、mongoose、express.js 和 ajax。

我目前正在尝试在用户提交表单并获取输入并将其从我的控制器文件中的 module.exports 内部保存到我的数据库中时发布。

当所有代码都在 server.js 内的一个位置时,我能够完成这项工作,但为了尝试适当地分解我的代码,我试图分离成一个 MVC 系统。

我的 addProductGroup 控制器如下所示:

//bring in models of data
var groups = require('../models').Groups;
var express = require('express');
var app = express();

//page functions go inside of module.exports
module.exports = {
    index: function(req, res){
        groups.find({}, function(err, groups){
            if(err){
                console.log(err);
            }else{
                res.render('addProductGroup',{title: 'Admin Add Group', adminloggedin: true, subtitle: 'Add a Group', underheaderp: ''});

    app.post('/admin/addProductGroup', function(req,res){
    var newGroupName = req.body.groupname;
    new groupName({
        groupName: req.body.groupname,
    }).save(function(err, doc){
        if(err){
            res.json(err)
        }
        else {
            res.render('addProductGroup',{title: 'Admin ASS Group', adminloggedin: true, subtitle: 'Add a Group', underheaderp: ''});
        }
    });
});
            }
});
    }
}

我的控制器正在从我的组集合中获取我的数据,然后呈现我的页面。然后,当用户发布数据时,我试图让它获取发布数据,将其保存到我的数据库中,然后呈现相同的页面。我在函数的嵌套和操作顺序方面玩了很多。

我的 groups.js 模型:

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

var GroupsSchema = new Schema ({
    groupName: String
});

module.exports = mongoose.model('groups', GroupsSchema);
var groupName = module.exports;

我正在为我的视图使用车把模板。

那么在我的 module.exports 中包含所有这些是可能完成的事情吗? 我是否需要尝试在我的 module.exports 之外编写一个函数来完成这项工作? 如果您需要查看我的任何其他文件,请告诉我。 任何帮助是极大的赞赏。

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    您没有澄清您遇到的问题,因此我将尝试为您提供一些一般性帮助:

    关于组织您的 express 应用程序,您绝对应该看看引入的第 4 版Routers。 您可以将路由直接绑定到路由器对象上,从而将您的逻辑分离到不同的文件(模块)中。

    您的 party.js 路由器可能如下所示:

    var express = require('express').Router()
    
    router.get('/paricipants', function(req, res) {
      res.send('dave','mike')
    })
    
    module.exports = router
    

    您的控制器目录(即 /controllers)中可以有多个这样的路由器(控制器)。充分利用 module.exports 功能,您现在可以在此目录中放置一个 index.js 文件,然后默认加载该文件,因为您需要该目录。

    您的控制器目录中的 index.js 文件可能如下所示:

    var router = require('express').Router()
    
    router.use('/party', require('./party'))
    
    // Your other routes to controllers and eventually global routes here.
    
    module.exports = router
    

    然后,您可以在 app.js 中简单地要求这个模块:

    var app = express()
    
    app.use(require('./controllers'))
    
    ...
    

    现在只需根据需要将猫鼬模型放入控制器中即可。

    这将为您提供更加模块化和结构化的应用程序设计。

    希望对你有帮助。

    【讨论】: