api-запрос express.js зависает, когда app.use использует импортированную функцию промежуточного программного обеспечения - PullRequest
1 голос
/ 28 июня 2019

Я пытаюсь создать простой API для отдыха с помощью express.js.Я использую Babel, поэтому я могу использовать синтаксис ES6.Изначально у меня была логика маршрута в server.js, и все работало нормально.Я хотел реструктурировать свои маршруты и поместить их во внешние файлы, а затем импортировать их в мой server.js.Я использовал app.use('/', routes) после импорта, чтобы запустить их в server.js.Я не могу заставить это работать.Когда я проверяю маршруты в почтальоне, он просто зависает.Я потратил много времени на stackoverflow и читал другие статьи, пытаясь выяснить, как импортировать, а затем использовать внешние файлы в моем файле server.js.Кажется, это должно быть просто, но я не могу заставить его работать.Кроме того, я попытался сделать то же самое с помощью require () и exports.module, прежде чем переключиться на babel, и он все еще не работал.

server.js

Я хочу импортировать свои маршруты из файла маршрутов / index.js здесь и вызвать его с файлом app.use('/', routes); ниже.

/*
 Name: server.js
 Notes: file that starts backend.
*/

//Imports
import express from 'express';
import * as bodyParser from 'body-parser';
import routes from './routes/index';

//Init Express
const app = express();

//Set Port Number
const port = process.env.PORT || 5000;

//Parses json
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

//  Connect all our routes to our application
app.use('/', routes);


//Spins up Node Server
app.listen(port, () => {
  console.log(`Listening on port ${port} `);
});

index.js

Я хочу экспортировать свою функцию маршрутизации отсюда маршрутов / index.js.

/*
  Name: index.js
  Notes: export routes function here
*/

import express from 'express';
const app = express();

function routes(){
    app.get('/test', function(req, res,next) {
        res.status(200).json({ message: 'Connected!' });
   });
}


export default routes

Структура папок

Это моя структура папок для задействованных файлов.

server.js
|
routes
     |
     index.js

1 Ответ

1 голос
/ 28 июня 2019

Здесь несколько вещей не так.

Во-первых, app.use('/', routes); просто неправильно.То, как вы определили route, это просто обычная функция (не промежуточное ПО), которую вы вызываете как обычную функцию, чтобы затем зарегистрировать ваш маршрут с помощью app.get().

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

Обычный способ инкапсулировать маршруты в отдельный файл - это использовать маршрутизатор.

/*
  Name: index.js
  Notes: export router here
*/

import express from 'express';
const router = express.Router();

router.get('/test', function(req, res,next) {
    res.status(200).json({ message: 'Connected!' });
});


export default router

И затем измените файл server.js для использования этого маршрутизатора, просто изменив имена для соответствия и подключив маршрутизатор к приложению с помощью app.use(router):

*
 Name: server.js
 Notes: file that starts backend.
*/

//Imports
import express from 'express';
import * as bodyParser from 'body-parser';
import router from './routes/index';

//Init Express
const app = express();

//Set Port Number
const port = process.env.PORT || 5000;

//Parses json
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

//  Connect all our routes to our application
app.use(router);


//Spins up Node Server
app.listen(port, () => {
  console.log(`Listening on port ${port} `);
});

Если вы не хотите использовать отдельный маршрутизатор (не знаете почему), вы можете просто передать объект app в функцию router() и просто вызвать его как обычную функцию.

/*
 Name: server.js
 Notes: file that starts backend.
*/

//Imports
import express from 'express';
import * as bodyParser from 'body-parser';
import routes from './routes/index';

//Init Express
const app = express();

//Set Port Number
const port = process.env.PORT || 5000;

//Parses json
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

//  Connect all our routes to our application
routes(app);


//Spins up Node Server
app.listen(port, () => {
  console.log(`Listening on port ${port} `);
});

/*
  Name: index.js
  Notes: export routes function here
*/

// function to initialize some routes on the pass-in app object
function routes(app){
    app.get('/test', function(req, res,next) {
        res.status(200).json({ message: 'Connected!' });
   });
}


export default routes
...