Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js+;mongo+;expressmvcapi:如何使用控制器?_Javascript_Node.js_Mongodb_Model View Controller_Mongoose - Fatal编程技术网

Javascript Node.js+;mongo+;expressmvcapi:如何使用控制器?

Javascript Node.js+;mongo+;expressmvcapi:如何使用控制器?,javascript,node.js,mongodb,model-view-controller,mongoose,Javascript,Node.js,Mongodb,Model View Controller,Mongoose,我正在写我的第一个MEANapp。。。正确地说,目前它是一个男性:-)应用程序,因为它现在只是服务器端API。。。 我想遵循MVC模式(或者MC,因为我没有视图) 我想为我的应用程序选择一个正确的结构,我试图了解如何使用路由、模型和控制器。。。特别是,我不清楚如何使用控制器 第一个问题是:如何以及在哪里定义我的类方法 当前: 我在“models/person.js”中定义了一个“model”。 然后,我在同一个模型文件中添加(类)方法,方法如下: personSchema.method.save

我正在写我的第一个
MEAN
app。。。正确地说,目前它是一个
男性
:-)应用程序,因为它现在只是服务器端API。。。
我想遵循
MVC
模式(或者
MC
,因为我没有视图)

我想为我的应用程序选择一个正确的结构,我试图了解如何使用路由、模型和控制器。。。特别是,我不清楚如何使用控制器

第一个问题是:如何以及在哪里定义我的类方法

当前:
我在“models/person.js”中定义了一个“model”。
然后,我在同一个模型文件中添加(类)方法,方法如下:

personSchema.method.save = function(callback) {
  this.model('Person').savefind({ type: this.type }, callback);
}
module.exports = mongoose.model('Person', personSchema);
然后,在routes(“routes/persons.js”,例如)中,我
require()
我需要的模型,并实现route方法

如果这是一种正确且常见的方法,我不理解如何使用控制器…:-(
在服务器端API公开应用程序中可能不需要控制器


希望有人能对我的理解有所帮助…:-)

假设您使用的是Express 4

创建一个
app.js
,例如

var express = require('express')
  , app = express()

//we're loading in our 'controllers' as middleware
app.use(require('./controllers'))

app.listen(3000, function() {
  console.log('Listening on port 3000...')
})
然后在
/controllers
中创建一个index.js,如下所示:

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

router.use('/person', require('./person'))

//default routes here
//these could go in a separate file if you want
router.get('/', function(req, res) {
  res.send('Home page')
})

router.get('/about', function(req, res) {
  res.send('Learn about us')
})

module.exports = router
接下来,您的
人员
控制器将如下所示:

var mongoose = require('mongoose'),
    Person = mongoose.model('Person'),
    express = require('express'),
    router = express.Router()

// actual url will be /person/ since we're loading this in via index.js
router.get('/', function(req, res) {
  Person.find({}, function(err, results) { return res.send(results); } );
})

router.post('/', function(req, res) {
  //save logic here
})

module.exports = router

控制器基本上是域代码和视图代码之间的适配器,这就是在Express中使用路由代码实现的功能。您可能希望通过快递人员了解更多信息,并谈论路线与控制器


另一方面,您会发现Angular确实有一个名为controllers的组件,理想情况下,它会将服务器对话方面委托给其他Angular组件,如服务,但可以说,这与您在典型MVC示例中可能想到的控制器并不完全一样。

是的,谢谢。。。我将您放入
/controllers
的逻辑放入'/routes`。。。也许我的误解就是这个。。。谢谢..@Alex所以在NodeJS中,控制器和模型基本相同?我对MVC的理解可能不正确,但在其他语言中,我通常只是在控制器中创建模型的实例,然后根据从控制器中提取的数据操作模型view@Alex没关系,看了之后我更明白了…除了mongoDB而不是MySQl,谢谢!是的,我确实使用了Angular,我的“控制器”的主要思想就是从Angular。。。谢谢你的链接!