一尘不染

将Express.js-REST-Endpoint与Meteor应用程序集成

node.js

我有一个棘手的情况:我正在构建一个完整的流星功能的应用程序。但是出于自动化原因,我还需要将某些功能公开为REST服务(第三方应用程序应该能够通过REST插入和接收数据)。

express.js-package似乎是将REST-
Endpoint构建到node.js环境中的一个非常可靠的选择,但是我想知道如何将该终结点集成到流星中。

我想要的是例如通过来访问“常规”站点http://myfancysite.com/my-display-route,同时又能够通过来访问我的REST-
Endpoint 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);

阅读 336

收藏
2020-07-07

共1个答案

一尘不染

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);

等等!

2020-07-07