Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 months ago.
The community reviewed whether to reopen this question 7 months ago and left it closed:
Original close reason(s) were not resolved
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(21)
好的,已经有一段时间了,这是一个很受欢迎的问题,所以我继续创建了一个带有 JavaScript 代码的脚手架 github 存储库,以及一个关于我如何构建中型express.js 应用程序的长自述文件。
focusaurus/express_code_struct 是包含最新代码的存储库。欢迎拉请求。
这是自述文件的快照,因为 stackoverflow 不喜欢只是一个链接的答案。我将进行一些更新,因为这是一个我将继续更新的新项目,但最终 github 存储库将成为此信息的最新位置。
#Express 代码结构
该项目是如何组织中型express.js Web 应用程序的示例。
当前至少为 Express v4.14 2016 年 12 月
有多大你的应用程序是?
Web 应用程序并不完全相同,而且在我看来,不存在应该应用于所有express.js 应用程序的单一代码结构。
如果您的应用程序很小,则不需要如此深的目录结构,如此处所示。只需保持简单并将一些
.js
文件粘贴到存储库的根目录中即可。瞧。如果您的应用程序很大,在某些时候您需要将其分解为不同的 npm 包。一般来说,node.js 方法似乎有利于许多小包,至少对于库来说是这样,您应该使用多个 npm 包来构建应用程序,因为这开始有意义并证明开销是合理的。因此,随着您的应用程序的增长,并且代码的某些部分变得明显可以在应用程序之外重用或者是一个明确的子系统,请将其移动到自己的 git 存储库并将其放入独立的 npm 包中。
因此该项目的重点是演示中型应用程序的可行结构。
您的整体架构是什么
构建 Web 应用程序的方法有很多,例如
中的每一个都很好地适合不同的目录结构。就本示例而言,它只是脚手架,而不是一个完全工作的应用程序,但我假设以下关键架构点:
那么 Ruby on Rails 又如何呢?
整个项目的一个主题是,Ruby on Rails 中体现的许多想法以及它们所采用的“约定优于配置”决策虽然被广泛接受和使用,但实际上并不是很有帮助,有时与此存储库的内容相反推荐。
我在这里的主要观点是,组织代码有一些基本原则,并且基于这些原则,Ruby on Rails 约定对于 Ruby on Rails 社区来说(大部分)是有意义的。然而,只是不假思索地模仿这些惯例就没有抓住要点。一旦您掌握了基本原则,您的所有项目都将组织良好且清晰:shell 脚本、游戏、移动应用程序、企业项目,甚至您的主目录。
对于 Rails 社区来说,他们希望能够让单个 Rails 开发人员在应用程序之间切换,并且每次都能熟悉并适应它。如果您是 37 个信号或 Pivotal Labs,这非常有意义,并且有好处。在服务器端 JavaScript 世界中,整体精神是更加狂野的西部风格,我们对此并没有真正的问题。我们就是这样滚动的。我们已经习惯了。即使在express.js中,它也是Sinatra的近亲,而不是Rails,并且从Rails中获取约定通常没有任何帮助。我什至会说原则优于约定优于配置。
基本原则和动机
app/node_modules
目录并具有proto-module 目录中的package.json
文件可促进该转换并充当提醒。app
目录中,因此您可以cd
运行 find/grep/xargs/ag/ack/etc 而不会分心通过第三方匹配-
是 JavaScript 中的减号。kebab-case
转换为camelCase
app/views
、app/controllers
、app/models
等约定有很大不同< /里>routes.rb
文件会很方便,但在实际构建功能和修复错误时,您只关心与您所在的部分相关的路线改变。app/users
中变得更加可能,因为不存在到处都是耦合业务逻辑的老鼠巢,污染了代码的纯度。用户代码库。app/server.js:1
启动,您可以按照代码查看它加载和执行的所有内容。magicRESRouter.route(somecontroller, { except: 'POST'})
对您来说比 3 个基本的app.get
是一个巨大的胜利>、app.put
、app.del
等调用,您可能正在构建一个太大而无法有效运行的整体应用程序。着眼于大胜利,而不是将 3 个简单行转换为 1 个复杂行。express.js 的具体细节
app.configure
。它几乎完全没用,你只是不需要它。由于无意识的复制,它出现在很多样板文件中。app.use
(我正在看着您,body-parser
)server.js
中,并且它将是清楚它们是如何排序的。对于中型应用程序,将事物分解为单独的路由模块很好,但它确实引入了无序中间件的危险应用程序符号链接技巧
社区在要点中详细概述和讨论了许多方法< a href="https://gist.github.com/branneman/8048520" rel="noreferrer">更好的 Node.js 本地 require() 路径。我可能很快就会决定选择“只处理大量 ../../../..”或使用 requireFrom 模块。然而,目前,我一直在使用下面详细介绍的符号链接技巧。
因此,避免项目内需要像
require("../../../config")
这样烦人的相对路径的一种方法是使用以下技巧:.gitignore
文件中应该仍然有“node_modules”var config = require("app/config");
var DealModel = require("app/deals/deal-model")
;配置
通常,编码模块和类只需要传入基本的 JavaScript
options
对象。只有app/server.js
应该加载app/config.js模块。从那里它可以合成小的
options
对象来根据需要配置子系统,但是将每个子系统耦合到一个充满额外信息的大型全局配置模块是不良耦合。尝试集中创建数据库连接并将其传递到子系统中,而不是传递连接参数并让子系统自己建立传出连接。
NODE_ENV
这是另一个从 Rails 继承下来的诱人但糟糕的想法。您的应用中应该有 1 个位置
app/config.js
来查看NODE_ENV
环境变量。其他一切都应该采用显式选项作为类构造函数参数或模块配置参数。如果电子邮件模块有一个关于如何发送电子邮件的选项(SMTP、登录到标准输出、放入队列等),它应该采用像
{deliver: 'stdout'}
这样的选项,但它绝对应该不检查NODE_ENV
。测试
现在,我将测试文件与其相应的代码放在同一目录中,并使用文件扩展名命名约定来区分测试和生产代码。
foo.js
具有模块“foo”的代码foo.tape.js
具有针对 foo 的基于节点的测试,并且位于同一目录foo 中。 btape.js
可用于需要在浏览器环境中执行的测试,我使用文件系统 glob 和
find 。 -name '*.tape.js'
命令可根据需要访问我的所有测试。如何在每个
.js
模块文件中组织代码该项目的范围主要是关于文件和目录的位置,我不想添加太多其他范围,但我只想提到我组织我的代码分为 3 个不同的部分。
OK, it's been a while and this is a popular question, so I've gone ahead and created a scaffolding github repository with JavaScript code and a long README about how I like to structure a medium-sized express.js application.
focusaurus/express_code_structure is the repo with the latest code for this. Pull requests welcome.
Here's a snapshot of the README since stackoverflow doesn't like just-a-link answers. I'll make some updates as this is a new project that I'll continue updating, but ultimately the github repo will be the up-to-date place for this information.
#Express Code Structure
This project is an example of how to organize a medium-sized express.js web application.
Current to at least express v4.14 December 2016
How big is your application?
Web applications are not all the same, and there's not, in my opinion, a single code structure that should be applied to all express.js applications.
If your application is small, you don't need such a deep directory structure as exemplified here. Just keep it simple and stick a handful of
.js
files in the root of your repository and you're done. Voilà.If your application is huge, at some point you need to break it up into distinct npm packages. In general the node.js approach seems to favor many small packages, at least for libraries, and you should build your application up by using several npm packages as that starts to make sense and justify the overhead. So as your application grows and some portion of the code becomes clearly reusable outside of your application or is a clear subsystem, move it to its own git repository and make it into a standalone npm package.
So the focus of this project is to illustrate a workable structure for a medium-sized application.
What is your overall architecture
There are many approaches to building a web application, such as
Each of these fits nicely into a different directory structure. For the purposes of this example, it's just scaffolding and not a fully working app, but I'm assuming the following key architecture points:
And what about Ruby on Rails?
It will be a theme throughout this project that many of the ideas embodied in Ruby on Rails and the "Convention over Configuration" decisions they have adopted, though widely accepted and used, are not actually very helpful and sometimes are the opposite of what this repository recommends.
My main point here is that there are underlying principles to organizing code, and based on those principles, the Ruby on Rails conventions make sense (mostly) for the Ruby on Rails community. However, just thoughtlessly aping those conventions misses the point. Once you grok the basic principles, ALL of your projects will be well-organized and clear: shell scripts, games, mobile apps, enterprise projects, even your home directory.
For the Rails community, they want to be able to have a single Rails developer switch from app to app to app and be familiar and comfortable with it each time. This makes great sense if you are 37 signals or Pivotal Labs, and has benefits. In the server-side JavaScript world, the overall ethos is just way more wild west anything goes and we don't really have a problem with that. That's how we roll. We're used to it. Even within express.js, it's a close kin of Sinatra, not Rails, and taking conventions from Rails is usually not helping anything. I'd even say Principles over Convention over Configuration.
Underlying Principles and Motivations
app/node_modules
directory and havepackage.json
files in the proto-module directories to facilitate that transition and act as a reminder.app
directory so you cancd
there are run find/grep/xargs/ag/ack/etc and not be distracted by third party matcheskebab-case
even though the variable name for that in JavaScript must becamelCase
because-
is a minus sign in JavaScript.kebab-case
transformed tocamelCase
app/views
,app/controllers
,app/models
, etcroutes.rb
file is handy if you want an overview of all routes in the app, but when actually building features and fixing bugs, you only care about the routes relevant to the piece you are changing.app/users
because there's not a rat's nest of coupled business logic all over the place polluting the purity of the user code base.app/server.js:1
and you can see everything it loads and executes by following the code.magicRESTRouter.route(somecontroller, {except: 'POST'})
is a big win for you over 3 basicapp.get
,app.put
,app.del
, calls, you're probably building a monolithic app that is too big to effectively work on. Get fancy for BIG wins, not for converting 3 simple lines to 1 complex line.express.js specifics
app.configure
. It's almost entirely useless and you just don't need it. It is in lots of boilerplate due to mindless copypasta.app.use
for your entire application if you really only need that middleware for 2 routes (I'm looking at you,body-parser
)server.js
and it will be clear how they are ordered. For a medium-sized application, breaking things out into separate routes modules is nice, but it does introduce peril of out-of-order middlewareThe app symlink trick
There are many approaches outlined and discussed at length by the community in the great gist Better local require() paths for Node.js. I may soon decide to prefer either "just deal with lots of ../../../.." or use the requireFrom modlue. However, at the moment, I've been using the symlink trick detailed below.
So one way to avoid intra-project requires with annoying relative paths like
require("../../../config")
is to use the following trick:.gitignore
filevar config = require("app/config");
var DealModel = require("app/deals/deal-model")
;Configuration
Generally code modules and classes to expect only a basic JavaScript
options
object passed in. Onlyapp/server.js
should load theapp/config.js
module. From there it can synthesize smalloptions
objects to configure subsystems as needed, but coupling every subsystem to a big global config module full of extra information is bad coupling.Try to centralize creation of DB connections and pass those into subsystems as opposed to passing connection parameters and having subsystems make outgoing connections themselves.
NODE_ENV
This is another enticing but terrible idea carried over from Rails. There should be exactly 1 place in your app,
app/config.js
that looks at theNODE_ENV
environment variable. Everything else should take an explicit option as a class constructor argument or module configuration parameter.If the email module has an option as to how to deliver emails (SMTP, log to stdout, put in queue etc), it should take an option like
{deliver: 'stdout'}
but it should absolutely not checkNODE_ENV
.Tests
I now keep my test files in the same directory as their corresponding code and use filename extension naming conventions to distinguish tests from production code.
foo.js
has the module "foo"'s codefoo.tape.js
has the node-based tests for foo and lives in the same dirfoo.btape.js
can be used for tests that need to execute in a browser environmentI use filesystem globs and the
find . -name '*.tape.js'
command to get access to all my tests as necessary.How to organize code within each
.js
module fileThis project's scope is mostly about where files and directories go, and I don't want to add much other scope, but I'll just mention that I organize my code into 3 distinct sections.
更新(2013-10-29):请参阅我的其他答案,其中根据大众的需求使用 JavaScript 而不是 CoffeeScript,以及样板 github 存储库和详细说明我对此主题的最新建议的详细自述文件。
配置
你所做的一切都很好。我喜欢在顶级 config.coffee 文件中设置自己的配置命名空间,并使用这样的嵌套命名空间。
这对于系统管理员编辑来说是友好的。然后,当我需要某些东西(例如数据库连接信息)时,它是
路由/控制器,
我喜欢将路由保留在控制器中,并将它们组织在
app/controllers
子目录中。然后我可以加载它们并让他们添加他们需要的任何路线。在我的
app/server.coffee
Coffeescript 文件中,我这样做:所以我有这样的文件:
例如,在我的域控制器中,我有一个像这样的
setup
函数。视图
将视图放在
app/views
中已成为惯例。我是这样布置的。静态文件
进入
public
子目录。Github/Semver/NPM
将 README.md markdown 文件放在 github 的 git repo 根目录中。
将带有语义版本号的 package.json 文件放入 NPM 的 git 存储库根目录中。
UPDATE (2013-10-29): Please see my other answer as well which has JavaScript instead of CoffeeScript by popular demand as well as a boilerplate github repo and an extensive README detailing my latest recommendations on this topic.
Config
What you are doing is fine. I like to have my own config namespace set up in a top-level
config.coffee
file with a nested namespace like this.This is friendly for sysadmin editing. Then when I need something, like the DB connection info, it`s
Routes/Controllers
I like to leave my routes with my controllers and organize them in an
app/controllers
subdirectory. Then I can load them up and let them add whatever routes they need.In my
app/server.coffee
coffeescript file I do:So I have files like:
And for example in my domains controller, I have a
setup
function like this.Views
Putting views in
app/views
is becoming the customary place. I lay it out like this.Static Files
Go in a
public
subdirectory.Github/Semver/NPM
Put a README.md markdown file at your git repo root for github.
Put a package.json file with a semantic version number in your git repo root for NPM.
以下是 Peter Lyons 的逐字回答,根据其他几个人的要求,从 Coffeescript 移植到了 vanilla JS。彼得的回答非常干练,任何对我的答案投票的人也应该对他的答案投票。
配置
你所做的一切都很好。我喜欢在顶级 config.js 文件中设置自己的配置命名空间,并使用这样的嵌套命名空间。
这对于系统管理员编辑来说是友好的。然后,当我需要某些东西(例如数据库连接信息)时,它是
路由/控制器,
我喜欢将路由保留在控制器中,并将它们组织在
app/controllers
子目录中。然后我可以加载它们并让他们添加他们需要的任何路线。在我的
app/server.js
javascript 文件中,我这样做:所以我有这样的文件:
例如,在我的域控制器中,我有一个像这样的
setup
函数。视图
将视图放在
app/views
中已成为惯例。我是这样布置的。静态文件
进入
public
子目录。Github/Semver/NPM
将 README.md markdown 文件放在 github 的 git repo 根目录中。
将带有 语义版本 编号的 package.json 文件放入 NPM 的 git 存储库根目录中。
The following is Peter Lyons' answer verbatim, ported over to vanilla JS from Coffeescript, as requested by several others. Peter's answer is very able, and anyone voting on my answer should vote on his as well.
Config
What you are doing is fine. I like to have my own config namespace set up in a top-level
config.js
file with a nested namespace like this.This is friendly for sysadmin editing. Then when I need something, like the DB connection info, it`s
Routes/Controllers
I like to leave my routes with my controllers and organize them in an
app/controllers
subdirectory. Then I can load them up and let them add whatever routes they need.In my
app/server.js
javascript file I do:So I have files like:
And for example in my domains controller, I have a
setup
function like this.Views
Putting views in
app/views
is becoming the customary place. I lay it out like this.Static Files
Go in a
public
subdirectory.Github/Semver/NPM
Put a README.md markdown file at your git repo root for github.
Put a package.json file with a semantic version number in your git repo root for NPM.
我的问题是 2011 年 4 月提出的,已经很老了。在此期间,我可以改善 Express.js 的体验以及如何构建使用该库编写的应用程序。所以,我在这里分享我的经验。
这是我的目录结构:
App.js
app.js
文件的目标是引导expressjs 应用程序。它加载配置模块、记录器模块、等待数据库连接……并运行 Express 服务器。routes/
路由目录有一个
index.js
文件。它的目标是引入一种魔法来加载routes/
目录中的所有其他文件。这是实现:使用该模块,创建新的路由定义和实现非常容易。例如,
hello.js
:每个路由模块都是独立的。
My question was introduced in April 2011, it's quiet old. During this time, I could improve my experience with Express.js and how to architecture an application written using this library. So, I share here my experience.
Here's my directory structure:
App.js
The goal of the
app.js
file is to bootstrap the expressjs application. It loads the configuration module, the logger module, wait for database connection, ..., and run the express server.routes/
The routes directory has a
index.js
file. Its goal is to introduce a kind of magic to load all other files inside theroutes/
directory. Here's the implementation:With that module, creating a new route definition and implementation is really easy. For examples,
hello.js
:Each route module is standalone.
我认为这是一个很好的方法。不限于express,但我在github上看到很多node.js项目都在做同样的事情。他们取出配置参数+较小的模块(在某些情况下每个 URI)被分解到单独的文件中。
我建议您浏览 github 上的 Express 特定项目以获得一个想法。 IMO,你的做法是正确的。
I think it's a great way to do it. Not limited to express but I've seen quite a number of node.js projects on github doing the same thing. They take out the configuration parameters + smaller modules (in some cases every URI) are factored in separate files.
I would recommend going through express-specific projects on github to get an idea. IMO the way you are doing is correct.
我喜欢使用全局“应用程序”,而不是导出函数等
I like to use a global "app", rather than exporting a function etc
现在是2015 年底,经过 3 年的小型和大型项目开发我的结构。结论?
不要做一个大的MVC,而是将其分成模块
所以...
为什么?
通常一个模块适用于一个模块(例如产品),您可以更改该模块独立。
您可以重用模块
您可以单独测试它
您可以单独替换它
它们具有清晰(稳定)的接口
- 最晚,如果有多个开发人员工作,模块分离会有所帮助
nodebootstrap 项目与我的最终结构有类似的方法。 (github)
这个结构是什么样的?
小型封装模块,每个模块都有单独的 MVC
每个模块都有一个 package.json
Testing 作为结构的一部分(在每个模块中)
全局配置、库和服务
集成 Docker、集群,永远
>
文件夹概述(模块见 lib 文件夹):
< /a>
it is now End of 2015 and after developing my structure for 3 years and in small and large projects. Conclusion?
Do not do one large MVC, but separate it in modules
So...
Why?
Usually one works on one module (e.g. Products), which you can change independently.
You are able to reuse modules
You are able to test it separatly
You are able to replace it separatly
They have clear (stable) interfaces
-At latest, if there were multiple developers working, module separation helps
The nodebootstrap project has a similar approach to my final structure. (github)
How does this structure look like?
Small, capsulated modules, each with separate MVC
Each module has a package.json
Testing as a part of the structure (in each module)
Global configuration, libraries and Services
Integrated Docker, Cluster, forever
Folderoverview (see lib folder for modules):
我给出了 MVC 风格的文件夹结构,请在下面找到。
我们为大中型 Web 应用程序使用了以下文件夹结构。
我创建了一个 npm 模块来生成 Express Mvc 文件夹结构。
请找到下面的 https://www.npmjs.com/package/express-mvc-generator
只需简单的步骤即可生成和使用此模块。
i) 安装模块
npm installexpress-mvc-generator -g
ii) 检查选项
express -h
iii) 生成express mvc 结构
express myapp
iv ) 安装依赖项:
npm install
:v)打开 config/database.js ,请配置您的 mongo db。
vi) 运行应用程序
node app
或nodemon app
vii) 检查 URL http ://localhost:8042/signup 或 http://yourip:8042/signup
I am giving MVC style folder structure please find bellow .
We used bellow folder structure for our big and medium web applications .
I have created one npm module for generation express mvc folder structurer.
Please find the bellow https://www.npmjs.com/package/express-mvc-generator
Just simple steps to generate and use this modules .
i) install module
npm install express-mvc-generator -g
ii) check options
express -h
iii) Generate express mvc structure
express myapp
iv) Install dependencies:
npm install
:v)Open your config/database.js , Please configure your mongo db.
vi)Run the application
node app
ornodemon app
vii)Check URL http://localhost:8042/signup OR http://yourip:8042/signup
我不认为将路由添加到配置中是一个好方法。更好的结构可能是这样的:
因此 products.js 和 users.js 将包含所有路由以及其中的所有逻辑。
I don't think it's a good approach to add routes to config. A better structure could be something like this:
So products.js and users.js will contain all your routes will all logic within.
自从上次回答这个问题以来已经有一段时间了,Express 最近还发布了版本 4,它添加了一些用于组织应用程序结构的有用内容。
下面是一篇长篇最新博客文章,介绍如何构建 Express 应用程序的最佳实践。
http://www.terlici.com/2014/08 /25/best-practices-express-struct.html
还有一个 GitHub 存储库应用了本文中的建议。它始终与最新的 Express 版本保持同步。
https://github.com/terlici/base-express
It's been quite a while since the last answer to this question and Express has also recently released version 4, which added a few useful things for organising your app structure.
Below is a long up to date blog post about best practices on how to structure your Express app.
http://www.terlici.com/2014/08/25/best-practices-express-structure.html
There is also a GitHub repository applying the advice in the article. It is always up to date with the latest Express version.
https://github.com/terlici/base-express
好吧,我把我的路线作为一个 json 文件,我在开始时阅读该文件,并在 app.js 的 for 循环中设置路线。 Route.json 包含应调用的视图以及将发送到路由中的值的键。
这适用于许多简单的情况,但我必须为特殊情况手动创建一些路由。
Well I put my routes as a json file, that I read at the beginning, and in a for-loop in app.js set up the routes. The route.json includes which view that should be called, and the key for the values that will be sent into the route.
This works for many simple cases, but I had to manually create some routes for special cases.
我专门写了一篇文章来讨论这个问题。它基本上利用了一个
routeRegistrar
来循环访问文件夹/controllers
中的文件,调用其函数init
。函数init
将expressapp
变量作为参数,以便您可以按照您想要的方式注册路线。I have written a post exactly about this matter. It basically makes use of a
routeRegistrar
that iterates through files in the folder/controllers
calling its functioninit
. Functioninit
takes the expressapp
variable as a parameter so you can register your routes the way you want.这可能会引起兴趣:
https://github.com/flatiron/nconf
This may be of interest:
https://github.com/flatiron/nconf
http://locomotivejs.org/ 提供了一种构建使用 Node.js 和 Express 构建的应用程序的方法。
来自网站:
http://locomotivejs.org/ provides a way to structure an app built with Node.js and Express.
From the website:
1) 您的 Express 项目文件系统可能类似于:
app.js - 您的全局应用程序容器
2) 模块主文件 (lib/mymodule/index.js):
3) 在主 app.js 中连接模块
4) 示例逻辑
tj 在 Vimeo 上说/展示了如何模块化的有趣想法快速申请——
使用 Node.js 和 Express 的模块化 Web 应用程序。功能强大且简单。
1) Your Express project filesystem maybe like:
app.js - you global app container
2) Module main file (lib/mymodule/index.js):
3) Connect module in main app.js
4) Sample logic
tj says/show on Vimeo interesting idea how modularize express application -
Modular web applications with Node.js and Express. Powerful and simple.
我最近将模块视为独立的迷你应用程序。
现在,对于任何模块,路由 (#.js)、视图 (*.ejs)、js、css 和资产都彼此相邻。
子模块路由是在父 #.js 中设置的,并带有另外两行,
这样甚至可以使用子模块。
不要忘记将视图设置为 src 目录
I recently embraced modules as independent mini-apps.
Now for any module routing (#.js), views (*.ejs), js, css and assets are next to each other.
submodule routing is set up in the parent #.js with two additional lines
This way even subsubmodules are possible.
Don't forget to set view to the src directory
Sails.js 结构对我来说看起来又漂亮又干净,所以我在我的 Express 项目中使用 MVC 风格结构,类似于 sails.js。
应用程序文件夹 - 包含应用程序的整体登录。
配置文件夹 - 包含应用配置、常量、路由。
公共文件夹 - 包含样式、图像、脚本等
视图文件夹 - 包含每个模型的视图(如果有)
可以在此处找到样板项目,
https://github.com/abdulmoiz251/node-express-rest-api-样板文件
Sails.js structure looks nice and clean to me, so I use MVC style structure for my express projects, similar to sails.js.
App folder - contains overall login for application.
Config folder - contains app configurations, constants, routes.
Public folder - contains styles, images, scripts etc.
Views folder - contains views for each model (if any)
Boilerplate project could be found here,
https://github.com/abdulmoiz251/node-express-rest-api-boilerplate
这就是我的大部分 Express 项目目录结构的样子。
我通常会使用
express dirname
来初始化项目,请原谅我的懒惰,但它非常灵活且可扩展。 PS - 您需要为此获取express-generator
(对于那些正在寻找它的人sudo npm install -gexpress-generator
,sudo 因为您正在安装它全球范围内)您一定想知道为什么是 .env 文件?因为他们工作!我在我的项目中使用了 dotenv 模块(最近经常使用)并且它有效!在
app.js
或www
中弹出这 2 条语句,并在另一行中快速设置
/bower_components
以在资源下提供静态内容/ext
它可能适合那些希望同时使用 Express 和 Angular 的人,或者只是在没有
javascripts
层次结构的情况下进行表达的人。This is how most of my express project directory structure looks.
I usually do a
express dirname
to initialise the project, forgive my laziness, but it's very flexible and extendable. PS - you need to getexpress-generator
for that (for those who're looking for itsudo npm install -g express-generator
, sudo because you're installing it globally)You must be wondering why .env files? Because they work! I use
dotenv
module in my projects (a lot recently) and it works! Pop in these 2 statements inapp.js
orwww
And another line to quickly set
/bower_components
to serve static content under the resource/ext
It probably can be a fit for people who're looking to use Express and Angular together, or just express without that
javascripts
hierarchy of course.我的结构表达4。
https://github.com/odirleiborgert/borgert-express-boilerplate
包
结构
My structure express 4.
https://github.com/odirleiborgert/borgert-express-boilerplate
Packages
Structure
构建 Express 应用程序的简单方法:
在主 index.js 中,应保持以下顺序。
<块引用>
所有app.set都应该放在第一位。
所有app.use应该排在第二位。
后跟其他 api 及其函数或在其他文件中继续路由
示例
app.use("/password",passwordApi);
app.use("/user", userApi);
app.post("/token", Passport.createToken);
app.post("/logout", Passport.logout)
A simple way to structure ur express app:
In main index.js the following order should be maintained.
ExpressJs 项目的 MVC 结构的最佳方法护照
Best Way To MVC Structure for ExpressJs Project with handlebar & Passportjs