如何在Ember CLI中使用自定义Express服务器? [英] How to use a custom Express server with Ember CLI?
问题描述
我正在使用Ember CLI 0.0.36。当我在项目文件夹中运行 ember服务器
时,我的理解是,埋在某些Brocoli进程中的服务器将启动。但是,我想对自定义Express服务器进行编程,并使我的应用程序指向其后端的Node.js代码。我将如何在Ember CLI框架中执行此操作?
I'm using Ember CLI 0.0.36. When I run ember server
in my project folder, my understanding is that a server buried in some Brocoli process gets started. However I would like to program a custom Express server and have my app point to that Node.js code for its backend. How would I go about doing that within the Ember CLI framework?
更新:
在@user3155277的答案,我添加了一个适配器文件,如下所示:
Following @user3155277's answer, I added an adapter file like so:
app-name / app / adapters / application.js :
import DS from 'ember-data';
export default DS.RESTAdapter.reopen({ namespace: 'api' });
我创建了一个Express服务器,放置在应用程序的根目录下:
I created an Express server that I put at the root of my app:
应用名称/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应用程序中,我的索引路径定义为:
In the Ember app, my index route is defined as so:
应用名称/应用/路由/index.js:
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
return Ember.$.getJSON("/api/test").then(function(data) {
return data;
});
}
});
然后在命令行上像这样启动服务器:
On the command line I then start the server like so:
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
推荐答案
Ember CLI 0.0.40:
This is actually pretty simple with Ember CLI 0.0.40:
创建文件夹结构
ember new my-app
进入新创建的文件夹
cd my-app
生成api-stub * (请参阅更新)
Generate api-stub* (see update)
ember generate api-stub my-server
后一个逗号d使用 index.js
文件和路由$ c创建一个
服务器
文件夹$ c>文件夹,其中包含 my-server.js
文件。
This latter command creates a server
folder with an index.js
file and a routes
folder with a my-server.js
file.
打开 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
,则进行如下编辑:
All you need to do then is to change that file. If the Ember app makes calls to /api/hamsters
and /api/project
, edit as follows:
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);
};
要启动服务器(从项目的根目录):
To start the server (from project's root):
ember server
确保已更新节点.js到最新版本。
Make sure you have updated node.js to the latest version as well.
从Ember CLI 0.0.41开始(通过此PR ) api-stub
已重命名为 http-mock
。
As of Ember CLI 0.0.41 (via this PR) api-stub
has been renamed http-mock
.
这篇关于如何在Ember CLI中使用自定义Express服务器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!