以下是Peter Lyons的逐字回答,应其他一些人的要求,从Coffeescript移植到Vanilla JS。彼得的答案非常有能力,任何对我的答案进行投票的人也应该对他的投票。
设定档
你在做什么很好。我喜欢在具有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}"
};
这对于sysadmin编辑很友好。然后,当我需要诸如数据库连接信息之类的信息时,
require('./config').db.URL
路线/控制器
我喜欢将路线留给我的控制器,并将它们组织在一个app/controllers
子目录中。然后,我可以加载它们,并让它们添加所需的任何路由。
在我的app/server.js
JavaScript文件中,我这样做:
[
'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文件放在github的git repo根目录下。
将具有语义版本号的package.json文件放入NPM的git repo根目录中。