解析服务器:自定义端点/快速路由

Posted

技术标签:

【中文标题】解析服务器:自定义端点/快速路由【英文标题】:Parse Server: Custom endpoint / Express route 【发布时间】:2016-06-07 02:26:02 【问题描述】:

在 Parse Server 中,应该将快速路由放在哪里?我发现它们只有在我将它们直接放入 index.js 时才有效,但这不是最好的地方,是吗?

我把它放在我的 cloud/main.js 中:

var express = require('express');
var app = express();

app.listen();

app.get('/test', function(req, res) 
    console.log("working?");
    res.status(200).send('working?');
);

console.log("this file definitely runs");

我的控制台输出在启动服务器时显示“此文件肯定运行”,但是当我尝试访问 localhost:1337/test 时,它只是显示“无法获取 /test”。而如果我只放 app.get('/test', ...);在 index.js 中,它可以工作。我想这是因为我不允许创建另一个 express() 实例,也许有办法获取在 index.js 中创建的实例?

【问题讨论】:

【参考方案1】:

我意识到您问的问题与我的回答所指的问题不同。万一你真的忘记了app.listen,我会把它留在下面。

如果您要将路由导出到其他文件,则需要将 app 对象从您的 index.js 传递到路由文件。

我通常做的是三个抽象层次。首先,您有 index.js,它声明了 appexpress instances。然后我有一个单独的文件,比如routeDefinitions.js(我通常称这个索引并在我的应用程序之后命名起点)。

routeDefinitions.js 内部,我使用来自index.jsapp 实例声明路由,结果如下:

app.js:

var express = require('express');
var app = express();

var routes = require('./routeDefinitions')(app);

routeDefinitions.js:

var test = require('./test');

module.exports = function(app) 
    app.get('/test', test.working);

    return app;
;

然后将每种类型的对象都放在它自己的路线文件中(假设您有用户、苹果和汽车,那么这些对象中的每一个都有自己的路线文件)。

test.js:

module.exports.working = function(req, res) 
    console.log("working?");
    res.status(200).send('working?');
;


您需要通过调用app.listen 来启动您的服务器,请参阅Hello World example。

您看到This definitely runs 是因为您确实在处理您的脚本,但是您没有在收听请求,因为您忘记启动您的快速服务器。

【讨论】:

谢谢,我试试看!即使添加了 app.listen(),它也不起作用。我添加“这肯定会运行”的原因是因为有时 node.js 在出现错误时会静默停止包含文件,所以我想确保它正在加载整个文件 哎呀,它失败了,但我认为那是因为 Parse Server。这是错误:textsaver.flap.tv/lists/zwo 它确实看起来是 Parse Server 中的一个问题。我对解析服务器没有任何经验。我没有看到任何明显的错误。由于您似乎正在使用示例项目,因此我建议您进行全新安装,仅使用必要的选项对其进行配置,一旦可行,就可以开始移动内容,确保一切都能与每一次更改保持一致。 我实际上需要启动一个新项目并采用上述架构。我找到了错误并编辑了答案,特别是我删除了app.use(routes); 行并将(app) 附加到var routes = require('./routeDefinitions')。它现在应该可以工作了。 哇,非常感谢!这正是我一直在寻找的 :) 它现在可以工作了!

以上是关于解析服务器:自定义端点/快速路由的主要内容,如果未能解决你的问题,请参考以下文章

将自定义中间件添加到 Laravel Passport 端点

Laravel 路由解析自定义数据类型

SpringCloud-Zuul(二):自定义Filter及Zuul内部路由源码解析

自定义路由在 Laravel 中无法解析

快速将数据解析为自定义数据对象

在.NET 6.0中自定义接口路由