我正在使用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);
配置/ 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());
});
};
配置/ routes.js
module.exports = function(app) {
app.get('/', function(req, res) {
res.send('Hello world !');
});
};
我喜欢将自己的配置名称空间设置在顶层config.js文件中,并使用这样的嵌套名称空间。
// Set the current environment to true in the env object
var currentEnv = process.env.NODE_ENV || 'development';
exports.appName = "MyApp";
exports.env = {
production: false,
staging: false,
test: false,
development: false
};
exports.env[currentEnv] = true;
exports.log = {
path: __dirname + "/var/log/app_#{currentEnv}.log"
};
exports.server = {
port: 9600,
// In staging and production, listen loopback. nginx listens on the network.
ip: '127.0.0.1'
};
if (currentEnv != 'production' && currentEnv != 'staging') {
exports.enableTests = true;
// Listen on all IPs in dev/test (for testing from other machines)
exports.server.ip = '0.0.0.0';
};
exports.db {
URL: "mongodb://localhost:27017/#{exports.appName.toLowerCase()}_#{currentEnv}"
};
这对于系统管理员编辑是很友好的。然后当我需要的东西,如数据库连接信息,这是
require('./config').db.URL
路线/控制器
我喜欢用我的控制器离开我的路线,并将其组织在一个app/controllers子目录中。然后,我可以加载它们,让他们添加他们需要的任何路线。
在我的app/server.jsJavaScript文件中,我这样做:
[
'api',
'authorization',
'authentication',
'domains',
'users',
'stylesheets',
'javascripts',
'tests',
'sales'
].map(function(controllerName){
var controller = require('./controllers/' + controllerName);
controller.setup(app);
});
所以我有这样的文件:
app/controllers/api.js
app/controllers/authorization.js
app/controllers/authentication.js
app/controllers/domains.js
例如在我的域控制器,我有这样的setup功能。
exports.setup = function(app) {
var controller = new exports.DomainController();
var route = '/domains';
app.post(route, controller.create);
app.put(route, api.needId);
app.delete(route, api.needId);
route = '/domains/:id';
app.put(route, controller.loadDomain, controller.update);
app.del(route, controller.loadDomain, function(req, res){
res.sendJSON(req.domain, status.OK);
});
}
查看
观点app/views正在成为习惯的地方。我这样摆出来。
app/views/layout.jade
app/views/about.jade
app/views/user/EditUser.jade
app/views/domain/EditDomain.jade
静态文件
进入一个public子目录。
Github上/ Semver / NPM
把一个README.md markdown文件放到git的git仓库中。
把一个包含语义版本号的package.json文件放在你的git仓库中,用于NPM。
具体的解决方案:http : //www.anujgakhar.com/2013/06/15/duplicates-in-a-repeater-are-not-allowed-in-angularjs/
AngularJS不允许在ng-repeat指令中重复。这意味着如果您正在尝试执行以下操作,则会出现错误。
// This code throws the error "Duplicates in a repeater are not allowed.
// Repeater: row in [1,1,1] key: number:1"
<div ng-repeat="row in [1,1,1]">
但是,你稍微更改上面的代码来定义一个索引来确定它的唯一性,并且使它再次工作。
// This will work
<div ng-repeat="row in [1,1,1] track by $index">
官方文档在这里: https://docs.angularjs.org/error/ngRepeat/dupes