ExpressJS如何构建应用程序?

Node.js

小胖Itachi

2020-03-16

我正在为NodeJS使用ExpressJS Web框架。

使用ExpressJS的人将他们的环境(开发,生产,测试...),路线等放置在app.js我认为这不是一个好方法,因为当您拥有大型应用程序时,app.js太大了!

我想要这个目录结构:

| my-application
| -- app.js
| -- config/
     | -- environment.js
     | -- routes.js

这是我的代码:

app.js

var express = require('express');
var app = module.exports = express.createServer();

require('./config/environment.js')(app, express);
require('./config/routes.js')(app);

app.listen(3000);

config / environment.js

module.exports = function(app, express){
    app.configure(function() {
    app.use(express.logger());
    });

    app.configure('development', function() {
    app.use(express.errorHandler({
        dumpExceptions: true,
        showStack: true
    }));
    });

    app.configure('production', function() {
    app.use(express.errorHandler());
    });
};

config / routes.js

module.exports = function(app) {
    app.get('/', function(req, res) {
    res.send('Hello world !');
    });
};

我的代码运行良好,我认为目录的结构很漂亮。但是,必须对代码进行修改,并且我不确定代码是否良好/美观。

使用我的目录结构并修改代码还是只使用一个文件(app.js)更好?

感谢您的建议!

第1770篇《ExpressJS如何构建应用程序?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

13个回答
泡芙古一神无 2020.03.16

带有把手和Passportjs的ExpressJs项目的MVC结构的最佳方法

- app
      -config 
        -passport-setup.js
      -controllers
      -middleware
      -models
      -routes
      -service
    -bin
      -www
      -configuration.js
      -passport.js
    -node_modules
    -views
     -handlebars page
    -env
    -.gitignore
    -package.json
    -package-lock.json
小哥猴子 2020.03.16

我的结构表达4. https://github.com/odirleiborgert/borgert-express-boilerplate

配套

View engine: twig
Security: helmet
Flash: express-flash
Session: express-session
Encrypt: bcryptjs
Modules: express-load
Database: MongoDB
    ORM: Mongoose
    Mongoose Paginate
    Mongoose Validator
Logs: winston + winston-daily-rotate-file
Nodemon
CSS: stylus
Eslint + Husky

结构体

|-- app
    |-- controllers
    |-- helpers
    |-- middlewares
    |-- models
    |-- routes
    |-- services
|-- bin
|-- logs
|-- node_modules
|-- public
    |-- components
    |-- images
    |-- javascripts
    |-- stylesheets
|-- views
|-- .env
|-- .env-example
|-- app.js
|-- README.md
Gil伽罗 2020.03.16

构建ur express应用的简单方法:

  • 在主index.js中,应保持以下顺序。

    所有app.set应该是第一位。

    所有app.use应该是第二位。

    其后是其他api及其功能或其他文件中的route-continue

    实例

    app.use(“ / password”,passwordApi);

    app.use(“ / user”,userApi);

    app.post(“ / token”,护照.createToken);

    app.post(“ /登出”,护照。登出)

神奇蛋蛋Sam 2020.03.16

这可能很有趣:

https://github.com/flatiron/nconf

带有文件,环境变量,命令行参数和原子对象合并的分层node.js配置。

梅Sam路易 2020.03.16

http://locomotivejs.org/提供了一种构建使用Node.js和Express构建的应用程序的方法。

从网站:

“ Locomotive是用于Node.js的Web框架。机车支持MVC模式,RESTful路由和配置约定,同时与任何数据库和模板引擎无缝集成。机车基于Express构建,保留了您所期望的功能和简单性来自Node。”

JimAGil 2020.03.16

我已经写了一篇关于这个问题的帖子。基本上,它使用a routeRegistrar遍历/controllers调用其函数的文件夹中的文件init函数init将express app变量作为参数,因此您可以按自己的方式注册路由。

var fs = require("fs");
var express = require("express");
var app = express();

var controllersFolderPath = __dirname + "/controllers/";
fs.readdirSync(controllersFolderPath).forEach(function(controllerName){
    if(controllerName.indexOf("Controller.js") !== -1){
        var controller = require(controllersFolderPath + controllerName);
        controller.init(app);
    }
});

app.listen(3000);
小小米亚 2020.03.16

我正在提供MVC样式的文件夹结构,请在下面找到。

我们将波纹管文件夹结构用于大中型Web应用程序。

 myapp   
|
|
|____app
|      |____controllers
|      |    |____home.js
|      |
|      |____models
|      |     |___home.js
|      |
|      |____views
|           |___404.ejs
|           |___error.ejs
|           |___index.ejs
|           |___login.ejs
|           |___signup.ejs
|   
|
|_____config
|     |___auth.js
|     |___constants.js
|     |___database.js
|     |___passport.js
|     |___routes.js
|
|
|____lib
|    |___email.js
|
|____node_modules
|
|
|____public.js
|    |____css
|    |    |__style.css
|    |    
|    |____js
|    |    |__script.js
|    |
|    |____img
|    |    |__img.jpg
|    |
|    |
|    |____uploads
|         |__img.jpg
|      
|   
|
|_____app.js
|
|
|
|_____package.json

我已经创建了一个用于生成express mvc文件夹结构器的npm模块。

请在下面找到 https://www.npmjs.com/package/express-mvc-generator

只需简单的步骤即可生成和使用此模块。

i)安装模块 npm install express-mvc-generator -g

ii)检查选项 express -h

iii)生成Express MVC结构 express myapp

iv)安装依赖项npm install

v)打开您的config / database.js,请配置您的mongo数据库。

vi)运行应用程序node appnodemon app

vii)检查URL http:// localhost:8042 / signuphttp:// yourip:8042 / signup

宝儿阿飞 2020.03.16

好吧,我将路由作为开头阅读的json文件放置,并在app.js的for循环中设置路由。route.json包括应调用的视图以及将发送到路由的值的键。
这适用于许多简单情况,但是我必须手动为特殊情况创建一些路由。

宝儿理查德村村 2020.03.16

自从最后一个回答这个问题已经有一段时间了,Express还最近发布了版本4,该版本添加了一些用于组织应用程序结构的有用信息。

以下是有关如何构建Express应用程序的最佳做法的最新博客文章。 http://www.terlici.com/2014/08/25/best-practices-express-structure.html

还有一个GitHub存储库,其中应用了本文中的建议。最新的Express版本始终是最新的。
https://github.com/terlici/base-express

Harry卡卡西 2020.03.16

现在是2015年底,经过3年的开发工作以及大小型项目的发展。结论?

不要做一个大型MVC,而是将其分成模块

所以...

为什么?

  • 通常,一个模块(例如产品)可以在一个模块上工作,您可以独立地对其进行更改。

  • 您可以重用模块

  • 您可以单独进行测试

  • 您可以分开更换

  • 它们具有清晰(稳定)的界面

    -最晚,如果有多个开发人员在工作,则模块分离会有所帮助

nodebootstrap项目也有类似的做法,以我的最终结构。github

这种结构看起来如何?

  1. 小型封装模块,每个模块都有单独的MVC

  2. 每个模块都有一个package.json

  3. 作为结构的一部分进行测试(在每个模块中)

  4. 全局配置,库和服务

  5. 永久集成Docker,集群

Folderoverview(有关模块,请参见lib文件夹):

nodebootstrap结构

古一小宇宙 2020.03.16

我认为这不是将路由添加到配置的好方法。更好的结构可能是这样的:

application/
| - app.js
| - config.js
| - public/ (assets - js, css, images)
| - views/ (all your views files)
| - libraries/ (you can also call it modules/ or routes/)
    | - users.js
    | - products.js
    | - etc...

因此,products.js和users.js将包含您的所有路由,并且其中包含所有逻辑。

Vicky 2020.03.16

我认为这是一种很棒的方法。不限于表达,但我已经在github上看到了很多node.js项目在做同样的事情。他们取出配置参数+较小的模块(在某些情况下,每个URI)都放在单独的文件中。

我建议您在github上进行特定于快递的项目,以获得一个想法。海事组织的做法是正确的。

米亚Harry 2020.03.16

我喜欢使用全局“应用程序”,而不是导出函数等

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android