我正在使用 Yeoman、Grunt 和 Bower 来构建一个平台,用于构建独立于后端的前端。我的想法是我的所有(AngularJS) Controller 、服务、工厂等都存在于这个项目中,然后根据 grunt 构建的结果注入(inject)到我的服务器端代码库中。
我的问题是:
如何模拟端点,以便 Grunt 服务器响应与我的(Rails)应用程序相同的端点?
目前我正在使用:
angular.module('myApp', ['ngResource'])
.run(['$rootScope', function ($rootScope) {
$rootScope.testState = 'test';
}]);
然后在我的每一项个人服务中:
mockJSON = {'foo': 'myMockJSON'}
在每种方法上:
if($rootScope.testState == 'test'){
return mockJSON;
}
else {
real service logic with $q/$http goes here
}
然后在
grunt build
之后, testState = 'test'
被移除。这显然是一个相对笨拙的架构。我怎样才能避免它?如何让 Grunt 响应与我的应用程序相同的端点(其中一些具有动态参数)应用一些逻辑(如果需要),并提供一个 json 文件(可能取决于路径参数)?
最佳答案
我已经通过使用 express 编写一个以静态 json 响应的服务器来解决这个问题。
首先,我在我的项目中创建了一个名为“api”的目录。在该目录中,我有以下文件:package.json
:
{
"name": "mockAPI",
"version": "0.0.0",
"dependencies": {
"express": "~3.3.4"
}
}
然后我运行
npm install
在这个目录中。index.js
: module.exports = require('./lib/server');
lib/server.js
: express = require('express');
var app = express();
app.get('/my/endpoint', function(req, res){
res.json({'foo': 'myMockJSON'});
});
module.exports = app
最后在我的全局
Gruntfile.js
: connect: {
options: {
port: 9000,
hostname: 'localhost',
},
livereload: {
options: {
middleware: function (connect, options) {
return [
lrSnippet,
mountFolder(connect, '.tmp'),
mountFolder(connect, yeomanConfig.app),
require('./api')
];
}
}
},
然后服务发出请求, express 服务器提供正确的 JSON。
之后
grunt build
, express 服务器被一个 rails 服务器简单地替换。
关于rest - 使用 Grunt 模拟端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17934608/