在AngularJS客户端和Node.js服务器之间重用/共享代码的最佳做法是什么?
我实现了一个AngularJS应用程序。现在我需要实现一个RESTful服务器,为客户端提供数据。一些客户端角度服务可以在服务器上重复使用,例如Facebook / Google / Twitter的第三方restful-clients,它们密集使用角度依赖注入,并且依赖于$http
,{{ 1}}和许多其他服务。
理想情况下,由于我非常喜欢AngularJS中包含的依赖注入框架,我会发现有一种基于AngularJS的服务器框架非常好。一种服务器框架,包括依赖注入框架和与UI无关的所有角度服务,并添加所需的服务器端功能,如路由和身份验证。但不幸的是,我没有找到任何解决方案。 (请告诉我这个框架是否存在!)
那么,为了至少在客户端和服务器之间重用代码,还有什么选择呢?特别是根据$q
,$http
以及角度框架和角度第三方(如$q
)中包含的其他AngularJS服务,重新使用代码代码。
答案 0 :(得分:6)
Ben Clinkinbeard准备角度分布为commonJS
模块(HERE),可以在非浏览器环境中运行:
AngularJS使用jsdom编译并作为CommonJS模块提供。 用于测试AngularJS代码,而不依赖于浏览器。
如果你想要更多挑选樱桃,你可能应该等待角度2.0
再次...... Ben Clinkinbeard。在 THIS TALK 中,他介绍了如何在角度项目中使用browserify。这种方法的一个很酷的特性是,您可以将您的函数/对象声明为单独的实体,无论如何都不会与角度耦合;所以它们也可以在不同的环境中重复使用。
一个例子:
<强> app.js 强>
var app = angular.module('someModule',[]);
...
app.factory('someService', require('./some/path.js'));
...
<强> ./some/path.js
强>
module.exports = function(dep1, dep2){
...
return {
...
}
}
module.exports.$inject['dep1', 'dep2']; // for minification;
答案 1 :(得分:1)
在这里使用RequireJS是有道理的。
而不是像Angular一样在Angular中定义你的模型/服务:
(function (angular) {
"use strict";
angular.module('myModule').factory('MyModel', function (Deps) {
var Model = function () {
// do things here
};
return Model;
});
}(window.angular));
你会这样做,将它分成2个文件:
model.js:
(function (define) {
"use strict";
define([], function () {
var factoryConstructor = function (deps) {
var Model = function () {
// do things here
};
return Model;
};
return factoryConstructor;
});
}(window.define));
whatever.js
(function (define, angular) {
"use strict";
define(['Model'], function (Model) {
angular.module("myModule").factory("myModel", Model);
});
}(window.define, window.angular));
选中此Videos以获取有关如何实施此功能的良好示例,该视频中还有repository。
答案 2 :(得分:1)
Angular 1.x是一个非常独立的框架。有一个计划将功能区分开来,但这将在版本2中出现。所以这很简单,只需为浏览器和node.js提供$ httpBackend的不同实现。
我创建了一个简单的演示如何使用CommonJS share code between node.js and browser。这可以用于共享验证,模型等。