16

Ember CLI 0.0.36 を使用しています。私のプロジェクト フォルダーで実行するember serverと、Brocoli プロセスに埋もれたサーバーが開始されると理解しています。ただし、カスタム Express サーバーをプログラムし、アプリがそのバックエンドの Node.js コードを指すようにしたいと考えています。Ember CLI フレームワーク内でそれを行うにはどうすればよいですか?

アップデート:

@ user3155277 の回答に続いて、次のようなアダプター ファイルを追加しました。

app-name/app/adapters/application.js :

import DS from 'ember-data';

export default DS.RESTAdapter.reopen({ namespace: 'api' });

アプリのルートに配置する Express サーバーを作成しました。

アプリ名/server.js :

var express = require("express"),
    app = express(),
    path = require("path");

app.get("/api/test", function(req, res) {
    res.json({
        hello: "world"
    });
});

var server = app.listen(8147);

Ember アプリでは、私のインデックス ルートは次のように定義されています。

アプリ名/アプリ/ルート/index.js :

import Ember from 'ember';

export default Ember.Route.extend({
    model: function() {
        return Ember.$.getJSON("/api/test").then(function(data) {
            return data;
        });
    }
});

コマンドラインで、次のようにサーバーを起動します。

ember serve --proxy http://localhost:8147/

次のエラーが表示されます。

version: 0.0.35-master-86abdb11ba
Proxying to http://localhost:8147/
object is not a functionTypeError: object is not a function
    at Class.module.exports.Task.extend.start (D:\ember-cli\lib\tasks\server\express-server.js:41:43)
    at Class.module.exports.Task.extend.run (D:\ember-cli\lib\tasks\serve.js:40:23)
    at Class.module.exports.Command.extend.run (D:\ember-cli\lib\commands\serve.js:35:18)
    at Class.Command.validateAndRun (D:\ember-cli\lib\models\command.js:74:15)
    at CLI.<anonymous> (D:\ember-cli\lib\cli\cli.js:33:20)
    at tryCatch (D:\ember-cli\node_modules\rsvp\dist\commonjs\rsvp\-internal.js:163:16)
    at invokeCallback (D:\ember-cli\node_modules\rsvp\dist\commonjs\rsvp\-internal.js:172:17)
    at publish (D:\ember-cli\node_modules\rsvp\dist\commonjs\rsvp\-internal.js:150:13)
    at flush (D:\ember-cli\node_modules\rsvp\dist\commonjs\rsvp\asap.js:51:9)
    at process._tickCallback (node.js:419:13)Livereload server on port 35729
4

2 に答える 2

19

これは実際には、Ember CLI 0.0.40 では非常に簡単です。

フォルダー構造の作成

ember new my-app

新しく作成したフォルダに移動します

cd my-app

api-stub* を生成します (更新を参照)

ember generate api-stub my-server

この後者のコマンドは、ファイルを含むフォルダーとファイルを含むserverフォルダーを作成します。index.jsroutesmy-server.js

ファイルを開くmy-server.jsと、次のように表示されます。

module.exports = function(app) {
    var express = require("express");
    var myServerRouter = express.Router();
    myServerRouter.get("/", function(req, res) {
        res.send({my-server:"something"});
    });
    app.use("/api", myServerRouter);
};

あとは、そのファイルを変更するだけです。Ember アプリが/api/hamstersおよびを呼び出す場合は/api/project、次のように編集します。

module.exports = function(app) {
    var express = require("express");
    var myServerRouter = express.Router();
    myServerRouter.get("/hamsters", function(req, res) {
        res.send({ ... });
    });
    myServerRouter.get("/project", function(req, res) {
        res.send({ ... });
    });
    app.use("/api", myServerRouter);
};

サーバーを起動するには (プロジェクトのルートから):

ember server

node.js も最新バージョンに更新されていることを確認してください。


アップデート

Ember CLI 0.0.41 以降 (この PR 経由)api-stubは名前が変更されましhttp-mockた。

于 2014-08-07T15:18:17.813 に答える