【问题标题】:How to use the new ember-cli http-mock for API calls如何使用新的 ember-cli http-mock 进行 API 调用
【发布时间】:2014-10-22 09:06:26
【问题描述】:

我有一个简单的(到目前为止)ember-cli 项目,现在只有一个带有 FIXTURE 数据的模型。我想用实际的 JSON 文件或 http-mock 来模拟 API 的东西,这是以前 api-stub 的 ember-cli 版本 41 名称。

我对这一切都很陌生,所以我真的不知道如何处理我找到的人们能够让 api-stub 工作的信息,而且它看起来不像 @ 上的任何文档987654321@ 已更新为http-mock 信息。

我确实做了ember generate http-mock project,但我不确定从这里开始做什么。

这是我当前的 app/router.js:

Router.map(function() {
  this.resource('projects', { path: '/' });
  this.resource('project', {path: '/project/:project_id'}, function(){
    this.resource('milestones');
    this.resource('team');
    this.resource('budget');
  });
});

所以我为我的所有项目都有一个模板,并且想要深入到一个模板,它需要能够与嵌套路由相关联。 我的理想是GitHub API 之类的东西,您可以在其中从用户向下钻取到存储库、该存储库上的问题等。

同样,我仍在学习 ember 和 ember-cli,因此非常感谢您对“为什么”和“如何”的解释。

【问题讨论】:

  • 我自己还在解决这个问题,但有一些信息 in this answer 可能会对您有所帮助。

标签: api ember.js ember-data ember-cli


【解决方案1】:

我对 ember/ember-cli 也很陌生,但我得到了一个简单的 http-mock 原型。生成您的 http-mock 项目后:

>ember g http-mock project

生成器应该已在您的项目中创建了一个“服务器”文件夹,其中您的 project.js 模拟位于“模拟”子目录中。如果您打开该文件 (server/mocks/project.js),您应该会看到如下内容:

module.exports = function(app) {
  var express = require('express');
  var projectRouter = express.Router();
  projectRouter.get('/', function(req, res) {
    res.send({project:[]});
  });
  app.use('/api/project', projectRouter);
};

您需要使用您的 api 应响应的 json 更新 res.send(...)。例如:

res.send({project:{id: 1, number: 123, name: 'Fooshnickins'}});

您可以通过运行您的服务器向自己证明这是可行的:

>ember server

卷曲你的 api(注意内容类型):

>curl -H "ContentType:application/json" http://localhost:4200/api/project

应回复:

{project:{id: 1, number: 123, name: 'Fooshnickins'}}

【讨论】:

  • 太棒了,谢谢。这确实有效。然后,你知道当我最终想要使用一个实际的 API 时我应该怎么做吗?我是否只是从 package.json 中删除 "APIMethod": "stub" 然后将主机添加到 RESTAdapter?
  • 您不再需要 package.json 中的“APIMethod: stub”设置。如果您的 api 已“完全实现”,您可以将主机添加到适配器,但如果您想使用一些模拟和一些 API,则意图(我相信)是使用 http-proxy。但是我认为它还没有按预期工作。我相信您应该能够“>ember g http-proxy projects localhost:3000”并且它应该将任何 localhost:4200/projects 请求代理到 localhost:3000/projects 但它目前代理到 localhost:3000/(忽略上的路径代理目标)。
  • 刚刚在 irc 上和 tstirrat 聊天。他为http-proxy蓝图生成的0.41版本代理代码提供了this simple fix。它添加回请求 url 的路径,然后将其添加到代理目标。您不能只将路径添加到目标,因为它会被代理实现(当前为 node-http-proxy)所扼杀。
  • 我遇到了一个问题,如果我在我的休息适配器中有一个主机设置,模拟将不会捕获请求,只​​有在我删除它开始捕获的主机设置之后。有什么想法吗?
  • 我相信这就是它的工作方式。在开发中,我建议使用 http-mock 和 http-proxy 的组合来构建您的 api,在这种情况下,您不会使用适配器中的“主机”设置,但可能会使用“命名空间”设置。如果您的生产环境需要不同的东西,您可以将其配置为“config/environment.js”并参考您应用中的配置。最新版本 (0.46) 以这种方式设置路由器的位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
相关资源
最近更新 更多