我有一个棘手的情况:我正在构建一个完整的流星功能的应用程序。但是出于自动化原因,我还需要将某些功能公开为REST服务(第三方应用程序应该能够通过REST插入和接收数据)。
express.js-package似乎是将REST- Endpoint构建到node.js环境中的一个非常可靠的选择,但是我想知道如何将该终结点集成到流星中。
我想要的是例如通过来访问“常规”站点http://myfancysite.com/my-display-route,同时又能够通过来访问我的REST- Endpoint http://myfancysite.com/api/insert-crazy-data/。
http://myfancysite.com/my-display-route
http://myfancysite.com/api/insert-crazy-data/
通过启动Meteor时定义的端口可以访问“常规”站点。事实是,我必须 为express.js 指定 一个不同的端口 来侦听,并且我希望流星和express都共享同一端口,因为我不想访问其他端口上的REST-Endpoint。
这可能吗?:D
这是我目前用于表达的一些代码。
//<meteor-root>\server\main.jsx import { Meteor } from 'meteor/meteor'; // do some meteor things ... //require express var express = require('express'); //create application var app = express(); //use environement defined port or 3000 var port = process.env.PORT || 3000; //create router var router = express.Router(); //define routes ... //register all routes with '/api' app.use('/api', router); //start server app.listen(port); // <= this should be the same port as the meteor application itself! console.log('listening on port ' + port);
Meteor本质上是一个已经公开了连接 http服务器的节点应用程序,这意味着您可以像下面这样定义服务器路由:
import { WebApp } from 'meteor/webapp'; WebApp.connectHandlers.use('/hello', (req, res, next) => { res.writeHead(200); res.end('Hello world from your server'); });
如果您坚持使用Express,则可以将Express路由注册为Connect中间件,如下所示:
import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; import express from 'express'; const app = express(); app.get('/api', (req, res) => { res.status(200).json({ message: 'Hello from Express!!!'}); }); WebApp.connectHandlers.use(app);
等等!