Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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
Node.js ExpressJS&;Mongoose REST API结构:最佳实践?_Node.js_Mongodb_Rest_Express_Mongoose - Fatal编程技术网

Node.js ExpressJS&;Mongoose REST API结构:最佳实践?

Node.js ExpressJS&;Mongoose REST API结构:最佳实践?,node.js,mongodb,rest,express,mongoose,Node.js,Mongodb,Rest,Express,Mongoose,我正在使用NodeJS(Mongoose&ExpressJS)构建一个restapi。我认为目前我有一个相当好的基本结构,但我想知道这种项目的最佳实践是什么 在这个基本版本中,所有内容都通过app.js文件。然后将每个HTTP方法传递给已请求的资源。这允许我动态地向API添加资源,每个请求都会相应地传递。举例说明: // app.js var express = require('express'); var mongoose = require('mongoose'); var app =

我正在使用NodeJS(Mongoose&ExpressJS)构建一个restapi。我认为目前我有一个相当好的基本结构,但我想知道这种项目的最佳实践是什么

在这个基本版本中,所有内容都通过
app.js
文件。然后将每个HTTP方法传递给已请求的资源。这允许我动态地向API添加资源,每个请求都会相应地传递。举例说明:

// app.js

var express = require('express');
var mongoose = require('mongoose');

var app = express();
app.use(express.bodyParser());

mongoose.connect('mongodb://localhost/kittens');
var db = mongoose.connection;

var resources = [
  'kitten'
];

var repositories = {};

for (var i = 0; i < resources.length; i++) {
  var resource = resources[i];
  repositories[resource] = require('./api/' + resource);
}

db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback() {
  console.log('Successfully connected to MongoDB.');

  app.get('/:resource', function (req, res) {
    res.type('application/json');
    repositories[req.params.resource].findAll(res);
  });

  app.get('/:resource/:id', function (req, res) {
    res.type('application/json');
    repositories[req.params.resource].findOne(req, res);
  });

  app.listen(process.env.PORT || 4730);
});
显然,到目前为止只实现了两种方法。你们觉得这个方法怎么样?有什么我可以改进的吗

还有一个小问题:我必须在每个API资源文件中要求mongoose(比如在
API\kitten.js
中),是否有一种方法可以在app.js文件或其他文件中全局要求它


非常感谢您的任何输入!

您可以在不同的文件中分离出路由、数据库模型和模板。 有这样的目录结构

| your_app
| -- routes
| -- models
| -- templates
| -- static
    | -- css
    | -- js
    | -- images
| -- config.js
| -- app.js
| -- url.js
  • 对于每个Mongoose模型,在
    /models
  • 在模板目录中放置您的JADE文件。(假设您正在使用JADE作为模板引擎)。虽然看起来您只为JSON服务,而不是HTML。如果您想渲染HTML,请考虑使用杰德。(这里还有几个其他您可以考虑的)。
  • /static
    静态JS、CSS和XML文件等的目录
  • db连接或第三方API密钥等内容可以放在config.js中
  • 在url.js中有一个过程,该过程将express
    app
    对象作为参数,并在
    app.get
    app.post
    上的单个位置进行扩展
另外,这是我在express中使用的基本web应用程序的方法。我绝不是说这是最好的方法,但它可以帮助我维护代码。

没有正确的方法,但我确实为我的个人目录结构创建了一个种子应用程序,以帮助我的室友实现这一点

您可以克隆它:
git clonehttps://github.com/hboylan/express-mongoose-api-seed.git


或者使用npm:
npm安装express mongoose api seed

,正如codemonger5所说,没有组织目录结构的正确方法

但是,您可以使用样板应用程序使用Express和mongoose使用ES6创建REST API。我们在生产API服务中使用相同的目录结构

git clone https://github.com/KunalKapadia/express-mongoose-es6-rest-api
cd express-mongoose-es6-rest-api
npm install
npm start
git clone https://github.com/KunalKapadia/express-mongoose-es6-rest-api
cd express-mongoose-es6-rest-api
npm install
npm start