首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ExpressJS如何构建应用程序?

ExpressJS如何构建应用程序?

提问于 2017-12-13 06:16:18
回答 2关注 0查看 331

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

使用ExpressJS的人把他们的环境(开发,生产,测试...),他们的路线等放在了网站上app.js。我认为这不是一个美丽的方式,因为当你有一个大的应用程序,app.js太大了!

我想要有这个目录结构:

代码语言:txt
复制
代码语言:txt
AI代码解释
复制
| my-application
代码语言:txt
AI代码解释
复制
| -- app.js
代码语言:txt
AI代码解释
复制
| -- config/
代码语言:txt
AI代码解释
复制
     | -- environment.js
代码语言:txt
AI代码解释
复制
     | -- routes.js
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
这是我的代码:
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
app.js
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
var express = require('express');
代码语言:txt
AI代码解释
复制
var app = module.exports = express.createServer();
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
require('./config/environment.js')(app, express);
代码语言:txt
AI代码解释
复制
require('./config/routes.js')(app);
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
app.listen(3000);
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
配置/ environment.js
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
module.exports = function(app, express){
代码语言:txt
AI代码解释
复制
    app.configure(function() {
代码语言:txt
AI代码解释
复制
    app.use(express.logger());
代码语言:txt
AI代码解释
复制
    });
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
    app.configure('development', function() {
代码语言:txt
AI代码解释
复制
    app.use(express.errorHandler({
代码语言:txt
AI代码解释
复制
        dumpExceptions: true,
代码语言:txt
AI代码解释
复制
        showStack: true
代码语言:txt
AI代码解释
复制
    }));
代码语言:txt
AI代码解释
复制
    });
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
    app.configure('production', function() {
代码语言:txt
AI代码解释
复制
    app.use(express.errorHandler());
代码语言:txt
AI代码解释
复制
    });
代码语言:txt
AI代码解释
复制
};
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
配置/ routes.js
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
module.exports = function(app) {
代码语言:txt
AI代码解释
复制
    app.get('/', function(req, res) {
代码语言:txt
AI代码解释
复制
    res.send('Hello world !');
代码语言:txt
AI代码解释
复制
    });
代码语言:txt
AI代码解释
复制
};

回答 2

不知雨

发布于 2017-12-13 06:40:32

我喜欢将自己的配置名称空间设置在顶层config.js文件中,并使用这样的嵌套名称空间。

代码语言:txt
AI代码解释
复制
// Set the current environment to true in the env object
代码语言:txt
AI代码解释
复制
var currentEnv = process.env.NODE_ENV || 'development';
代码语言:txt
AI代码解释
复制
exports.appName = "MyApp";
代码语言:txt
AI代码解释
复制
exports.env = {
代码语言:txt
AI代码解释
复制
  production: false,
代码语言:txt
AI代码解释
复制
  staging: false,
代码语言:txt
AI代码解释
复制
  test: false,
代码语言:txt
AI代码解释
复制
  development: false
代码语言:txt
AI代码解释
复制
};  
代码语言:txt
AI代码解释
复制
exports.env[currentEnv] = true;
代码语言:txt
AI代码解释
复制
exports.log = {
代码语言:txt
AI代码解释
复制
  path: __dirname + "/var/log/app_#{currentEnv}.log"
代码语言:txt
AI代码解释
复制
};  
代码语言:txt
AI代码解释
复制
exports.server = {
代码语言:txt
AI代码解释
复制
  port: 9600,
代码语言:txt
AI代码解释
复制
  // In staging and production, listen loopback. nginx listens on the network.
代码语言:txt
AI代码解释
复制
  ip: '127.0.0.1'
代码语言:txt
AI代码解释
复制
};  
代码语言:txt
AI代码解释
复制
if (currentEnv != 'production' && currentEnv != 'staging') {
代码语言:txt
AI代码解释
复制
  exports.enableTests = true;
代码语言:txt
AI代码解释
复制
  // Listen on all IPs in dev/test (for testing from other machines)
代码语言:txt
AI代码解释
复制
  exports.server.ip = '0.0.0.0';
代码语言:txt
AI代码解释
复制
};
代码语言:txt
AI代码解释
复制
exports.db {
代码语言:txt
AI代码解释
复制
  URL: "mongodb://localhost:27017/#{exports.appName.toLowerCase()}_#{currentEnv}"
代码语言:txt
AI代码解释
复制
};

这对于系统管理员编辑是很友好的。然后当我需要的东西,如数据库连接信息,这是

代码语言:txt
复制
代码语言:txt
AI代码解释
复制
require('./config').db.URL

路线/控制器

我喜欢用我的控制器离开我的路线,并将其组织在一个app/controllers子目录中。然后,我可以加载它们,让他们添加他们需要的任何路线。

在我的app/server.jsJavaScript文件中,我这样做:

代码语言:txt
复制
代码语言:txt
AI代码解释
复制
[
代码语言:txt
AI代码解释
复制
  'api',
代码语言:txt
AI代码解释
复制
  'authorization',
代码语言:txt
AI代码解释
复制
  'authentication',
代码语言:txt
AI代码解释
复制
  'domains',
代码语言:txt
AI代码解释
复制
  'users',
代码语言:txt
AI代码解释
复制
  'stylesheets',
代码语言:txt
AI代码解释
复制
  'javascripts',
代码语言:txt
AI代码解释
复制
  'tests',
代码语言:txt
AI代码解释
复制
  'sales'
代码语言:txt
AI代码解释
复制
].map(function(controllerName){
代码语言:txt
AI代码解释
复制
  var controller = require('./controllers/' + controllerName);
代码语言:txt
AI代码解释
复制
  controller.setup(app);
代码语言:txt
AI代码解释
复制
});

所以我有这样的文件:

代码语言:txt
AI代码解释
复制
app/controllers/api.js
代码语言:txt
AI代码解释
复制
app/controllers/authorization.js
代码语言:txt
AI代码解释
复制
app/controllers/authentication.js
代码语言:txt
AI代码解释
复制
app/controllers/domains.js
代码语言:txt
AI代码解释
复制
例如在我的域控制器,我有这样的setup功能。
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
exports.setup = function(app) {
代码语言:txt
AI代码解释
复制
  var controller = new exports.DomainController();
代码语言:txt
AI代码解释
复制
  var route = '/domains';
代码语言:txt
AI代码解释
复制
  app.post(route, controller.create);
代码语言:txt
AI代码解释
复制
  app.put(route, api.needId);
代码语言:txt
AI代码解释
复制
  app.delete(route, api.needId);
代码语言:txt
AI代码解释
复制
  route = '/domains/:id';
代码语言:txt
AI代码解释
复制
  app.put(route, controller.loadDomain, controller.update);
代码语言:txt
AI代码解释
复制
  app.del(route, controller.loadDomain, function(req, res){
代码语言:txt
AI代码解释
复制
    res.sendJSON(req.domain, status.OK);
代码语言:txt
AI代码解释
复制
  });

}

查看

观点app/views正在成为习惯的地方。我这样摆出来。

代码语言:txt
AI代码解释
复制
app/views/layout.jade
代码语言:txt
AI代码解释
复制
app/views/about.jade
代码语言:txt
AI代码解释
复制
app/views/user/EditUser.jade
代码语言:txt
AI代码解释
复制
app/views/domain/EditDomain.jade

静态文件

进入一个public子目录。

Github上/ Semver / NPM

把一个README.md markdown文件放到git的git仓库中。

把一个包含语义版本号的package.json文件放在你的git仓库中,用于NPM。

akjok54

发布于 2017-12-13 06:36:20

具体的解决方案:http : //www.anujgakhar.com/2013/06/15/duplicates-in-a-repeater-are-not-allowed-in-angularjs/

AngularJS不允许在ng-repeat指令中重复。这意味着如果您正在尝试执行以下操作,则会出现错误。

代码语言:txt
AI代码解释
复制
// This code throws the error "Duplicates in a repeater are not allowed.
代码语言:txt
AI代码解释
复制
// Repeater: row in [1,1,1] key: number:1"
代码语言:txt
AI代码解释
复制
<div ng-repeat="row in [1,1,1]">

但是,你稍微更改上面的代码来定义一个索引来确定它的唯一性,并且使它再次工作。

代码语言:txt
AI代码解释
复制
// This will work
代码语言:txt
AI代码解释
复制
<div ng-repeat="row in [1,1,1] track by $index">

官方文档在这里: https://docs.angularjs.org/error/ngRepeat/dupes

和开发者交流更多问题细节吧,去 写回答
相关文章
如何构建Android MVVM应用程序
Databinding 是一种框架,MVVM是一种模式,两者的概念是不一样的。我的理解DataBinding是一个实现数据和UI绑定的框架,只是一个实现MVVM模式的工具。ViewModel和View可以通过DataBinding来实现单向绑定和双向绑定,这套UI和数据之间的动态监听和动态更新的框架Google已经帮我们做好了。在MVVM模式中ViewModel和View是用绑定关系来实现的,所以有了DataBinding 使我们构建Android MVVM 应用程序成为可能。   之前看了很多关于DataBinding的博客和相关的一些Demo,大多数就是往xml布局文件传入一些数据,然后把这些数据绑定到控件上( 如TextView binding:text=“@{user.name} ),接着在这些控件上(如Button binding:setOnClickListener="@{user.listener}") 设置一些事件到控件上,基本讲述都是DataBinding的基本用法。但是并没有人告诉你把一个onClickListener 写到一个类并把这个listener绑定到xml里面上是不是不太好,也没有人告诉你这个和xml布局绑定的ViewModel类应该放哪些数据,应该做什么事?应该如何设计?更是很少有博文来告诉你在Android 中如何通过Data Binding 去构建MVVM 的应用框架。这也就是是本篇文章的重点。接下来,我们先来看看什么是MVVM,然后在一步一步来设计整个应用程序框架。
developerHaoz
2022/05/13
1.5K0
如何构建Android MVVM应用程序
如何构建可扩展的应用程序
所以你有一个很棒的主意。而且你有来自大学的朋友可以帮助你开始构建你的应用程序。您也可以从早期采用者那里获得很好的反馈。所以你做任何人都会做的事。启动你的应用!
February
2018/11/20
1.5K0
如何在DjangoRestFramework和ExpressJS中分别设置CORS
Django Rest Framework 的设置 安装包django-cors-headers: pip install django-cors-headers 在Django项目配置文件settings.py中,添加应用: INSTALLED_APPS = ( ... 'corsheaders', ... ) 中间件部分还需添加: MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10 ... 'corsh
fanzhh
2019/08/20
6660
如何使用JavaScript UI控件,构建Electron应用程序[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 概述 What is Electron? Electron是一个使用JavaScript、HTML和CSS构建跨平台桌面应用程序的框架。 您可以将Electr
全栈程序员站长
2022/08/04
1.4K0
如何使用JavaScript UI控件,构建Electron应用程序[通俗易懂]
如何在 JavaScript 中构建命令行应用程序
要使用 Commander.js 库,您必须安装 Node.js。在 Linux 上,您可以使用包管理器安装 Node。例如,在 Fedora、CentOS、Mageia 等上:
KINGLIFE
2021/11/11
2.4K0
如何使用wxPython构建一个GUI应用程序
wxPython是Python语言的一套优秀的GUI图形库。我们可以使用Python程序很方便的创建完整的、功能键全的GUI用户界面。 wxPython是作为优秀的跨平台GUI库wxWidgets的Python封装和Python模块的方式提供给用户的。
TalkPython
2019/05/24
2.8K1
为世界构建应用程序
在155个国家和40多种语言中增长您的业务, 并帮助世界各地的用户轻松地发现和下载您的应用程序。
iOSDevLog
2018/07/25
1K0
综合指南·构建 Kubernetes 应用程序
Kubernetes 已成为领先的容器编排平台,使组织能够大规模构建、部署和管理容器化应用程序。借助 Kubernetes您可以简化部署流程、优化资源利用率并确保应用程序的高可用性。然而,为了充分利用 Kubernetes,从头开始有效地设计应用程序至关重要。
DevOps云学堂
2023/08/22
2900
综合指南·构建 Kubernetes 应用程序
Spring认证指南:了解如何以最少的配置构建应用程序
本指南提供了Spring Boot如何帮助您加速应用程序开发的示例。随着您阅读更多 Spring 入门指南,您将看到更多 Spring Boot 用例。本指南旨在让您快速了解 Spring Boot。如果您想创建自己的基于 Spring Boot 的项目,请访问Spring Initializr,填写您的项目详细信息,选择您的选项,然后将捆绑的项目下载为 zip 文件。
IT胶囊
2022/04/06
1.1K0
Spring认证指南:了解如何以最少的配置构建应用程序
原生小案例:如何使用HTML5 Canvas构建画板应用程序
HTML canvas标签是一个HTML元素,它提供了一个空白的绘图表面,可以使用JavaScript来渲染图形、形状和图像。绘图应用程序利用HTML5 canvas的功能,使用户能够以数字方式创建艺术作品、草图和插图。此外,使用HTML5 canvas构建的绘图应用程序允许用户与画布进行交互,捕捉鼠标移动和点击事件,实时绘制、擦除或操作元素。
前端达人
2023/08/31
1K0
原生小案例:如何使用HTML5 Canvas构建画板应用程序
在 Microsoft 云上构建应用程序
Microsoft 云包括了Azure、Power Platform、Microsoft 365、GitHub、Dynamics 365 等,虽然许多企业应用程序开发领导者了解在 Azure 上创建应用程序的价值,但事实是您可以将整个 Microsoft 云作为应用程序平台. 有一篇文章:在 Microsoft 云上构建应用程序 从应用程序开发角度介绍了 Microsoft 云的大局,重点介绍领导者必须执行的操作才能取得成功。
张善友
2022/05/31
9560
在 Microsoft 云上构建应用程序
使用rudr构建云原生应用程序
OAM是构建云原生应用程序的规范 专注于分离开发和运营需求,Open Application Model将模块化, 可扩展和可移植的设计引入到Kubernetes等平台上,以构建和交付应用程序。
有点技术
2020/07/14
1.1K0
使用Vue构建桌面应用程序:Vuido
我非常喜欢Vue。这是个优秀的框架,可以帮助我们搭建完美的web应用程序。但真正神奇的地方是你不仅仅可以用它搭建web应用程序,还可以使用Weex或NativeScript-Vue创建本地移动应用程序。你还可以选择Electron或Vuido库,搭建桌面应用程序。在本文中,我将介绍如何使用Vuido库创建本地应用程序。
知忆
2021/06/06
1.5K0
Spring认证指南:了解如何使用 Gemfire 的数据结构构建应用程序
您将使用Spring Data for Apache Geode来存储和检索 POJO。
IT胶囊
2022/03/07
1K0
Spring认证指南:了解如何使用 Gemfire 的数据结构构建应用程序
构建一个应用程序来展示区块链是如何工作的
让我们通过构建一个应用程序来展示区块链是如何工作的。根据维基百科的描述,区块链是:一种分布式数据库,用于维护不断增长的记录列表,称为块。这听起来似乎不错,但它到底是如何工作的?
笔阁
2019/06/19
1.5K0
构建一个应用程序来展示区块链是如何工作的
如何配置应用程序
今天我们来分享 ConfigMap 资源,分享之前,我们来看看前面我们跑应用程序都是怎么玩的
阿兵云原生
2023/09/01
3000
如何配置应用程序
如何为你的应用程序或网站快速构建一个搜索界面
直观的搜索界面对于任何出色的在线体验都至关重要。但很多时候, 它们可能需要花费大量的精力来建造并保持
点火三周
2022/05/06
1.5K0
如何为你的应用程序或网站快速构建一个搜索界面
Web 上构建MDI 应用程序---Prototype Window Class
      今晚在网上看到一个非常酷的JS框架Prototype Window Class。Web开发者通过Prototype Window Class便可以轻松地在网页上构建各式各样的窗口(Window or Windows)。而且Prototype Window Class的文件很完整,使用起来应该不会有太大困难,再加上Sample网页有几个例子很吸引我,很简单就可以做出类似HEMiDEMi或是Netvibes的登入效果,对我这种懒人而言,不需要多研究什么东西就可以完成一件事情是多好的事情!而且是开源的
张善友
2018/01/26
7590
我们在未来会怎样构建Web应用程序?
作者 | Stepan Parunashvili 译者 | 王强 策划 | 万佳 在未来,我们会怎样构建 Web 应用程序呢? 如果行业正常发展下去的话,那么今天我们认为很难、做起来很有价值的事情在明天都会变得很轻松普遍。我想我们会发现很多新的抽象,让 Google Docs 写起来也能像今天的普通 Web 应用一样简单。 这就引出来一个问题——这些抽象会是什么样子?我们今天能发现它们吗?想要找出答案,一种方法是审视我们在构建 Web 应用程序时必须经历的所有问题,然后看看我们能做些什么。 亲爱的读者,这
深度学习与Python
2023/04/01
10.9K0
我们在未来会怎样构建Web应用程序?
构建Flink第一个应用程序
Flink 可以运行在 Linux、Mac 以及 Windows 上。在这我们使用的是 Mac 系统。为了开发 Flink 应用程序,需要提前安装 Java 和 Maven 环境。
smartsi
2020/09/22
9200
构建Flink第一个应用程序

相似问题

如何构建积分赠送系统?

3238

如何快速构建V**网络通道?

1293

如何用大数据构建用户画像?

122.6K

如何在C#中构建XML?

2256

如何使用轻量应用服务器部署微信小程序的后台应用(Expressjs + MongoDb)?

0162
相关问答用户
某公司 | 程序员擅长1个领域
腾讯云TDP | 先锋会员擅长2个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档