Parse Server: пользовательская конечная точка / экспресс-маршрут

В Parse Server, где вы должны размещать экспресс-маршруты? Я обнаружил, что они работают, только если я помещу их прямо в index.js, но это не лучшее место, не так ли?

Я поместил это в свое облако/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, он просто говорит «Cannot GET/test». А если я поставлю только app.get('/test', ...); в index.js это работает. Я полагаю, это потому, что мне не разрешено создавать другой экземпляр express(), может быть, есть способ получить экземпляр, созданный в index.js?


person Alex Wally    schedule 07.06.2016    source источник


Ответы (1)


Я понимаю, что вы задаете вопрос, отличный от того, на что указывает мой ответ. Если вы все еще забыли app.listen, я оставлю его ниже.

Если вы собираетесь экспортировать свои маршруты в другой файл, вам нужно передать объект app из вашего index.js в файл маршрутов.

Что я обычно делаю, так это три уровня абстракции. Во-первых, у вас есть index.js, который объявляет app и express instances. Затем у меня есть отдельный файл, скажем, routeDefinitions.js (я обычно называю этот индекс и называю начальную точку после моего приложения).

Внутри routeDefinitions.js я объявляю маршруты, используя экземпляр app из index.js, что приводит к следующему:

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 .

Вы видите This definitely runs, потому что вы действительно обрабатываете свой скрипт, но не слушаете запросы, потому что забыли запустить экспресс-сервер.

person Lars de Bruijn    schedule 07.06.2016
comment
спасибо, я попробую! Даже после добавления app.listen() он не работает. Причина, по которой я добавил, что это определенно работает, заключается в том, что иногда node.js молча останавливает включение файлов, если есть ошибки, поэтому я хотел убедиться, что он загружает весь файл. - person Alex Wally; 08.06.2016
comment
Гах, это не удалось, но я думаю, что это из-за Parse Server. Вот ошибка: textsaver.flap.tv/lists/zwo - person Alex Wally; 08.06.2016
comment
Это действительно похоже на проблему на сервере Parse. У меня нет опыта работы с parse-server. Явных ошибок не вижу. Поскольку кажется, что вы используете пример проекта, я бы посоветовал получить чистую установку, настроить ее только с необходимыми параметрами, и как только это сработает, начните перемещать вещи, следя за тем, чтобы все продолжало работать с каждым изменением. - person Lars de Bruijn; 08.06.2016
comment
На самом деле мне нужно было запустить новый проект, и я выбрал вышеуказанную архитектуру. Я нашел ошибку и отредактировал ответ, в частности, я удалил строку app.use(routes); и добавил (app) к var routes = require('./routeDefinitions'). Теперь это должно работать. - person Lars de Bruijn; 08.06.2016
comment
Вау, спасибо большое! Это именно то, что я искал :) теперь это работает! - person Alex Wally; 09.06.2016