Как использовать пользовательский Express-сервер с Ember CLI?

Я использую Ember CLI 0.0.36. Когда я запускаю ember server в моей папке проекта, я понимаю, что сервер, зарытый в каком-то процессе Brocoli, запускается. Однако я хотел бы запрограммировать пользовательский Express-сервер и указать свое приложение для этого Node.js-кода для его бэкэнд. Как я буду делать это в рамках Ember CLI?

UPDATE:

Следуя @user3155277 answer, я добавил файл адаптера следующим образом:

приложение-имя/приложение/адаптеры/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

Ответы

Ответ 1

На самом деле это довольно просто с Ember CLI 0.0.40:

Создание структуры папок

ember new my-app

Перейдите во вновь созданную папку

cd my-app

Создать api-stub * (см. обновление)

ember generate api-stub my-server

Эта последняя команда создает папку server с файлом index.js и routes с файлом my-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.

Ответ 2

Я начал играть с ember cli, поэтому не уверен, но нашел следующее: https://github.com/dockyard/ember-cli-plus-backend/tree/rails-served-html/frontend/api-stub В принципе, вы должны проксировать свой экспресс-сервер в тот же порт, что и ваш ember-cli (так что вам не нужно иметь дело с проблемой jsonp)

Задайте метод "прокси" и определите proxyURL, чтобы передать все запросы API на URL-адрес прокси-сервера.

UPDATE:

1.Генератор-адаптер ember generate adapter application

2.Make пространство имен api - заполните созданный файл следующим кодом:

экспорт по умолчанию DS.RESTAdapter.reopen({   namespace: 'api' });

3. Запустите сервер с помощью ember serve --proxy http://localhost:1337/ (это проксирует весь ваш запрос на localhost: от 4200 до 1337

4. Создайте маршруты в своем экспресс-приложении с префиксом /api

Надеюсь, что это поможет