express.js api 请求在 app.use 使用导入的中间件功能时挂起

express.js api request hangs when app.use uses imported middleware function

我正在尝试用 express.js 创建一个简单的休息 api。我正在使用 babel,所以我可以使用 es6 语法。最初我在 server.js 中有我的路由逻辑并且一切正常。我想重组我的路线并将它们放入外部文件,然后将它们导入我的 server.js。我在 server.js 中导入 运行 后使用了 app.use('/', routes)。我无法让它工作。当我在邮递员中检查路线时,它就挂了。我花了很多时间在 Whosebug 上并阅读其他文章,试图找出如何在我的 server.js 文件中导入和使用外部文件。看起来应该很简单,但我无法让它工作。另外,在我切换到 babel 之前,我尝试用 require() 和 exports.module 做同样的事情,但它仍然没有用。

server.js

我想从这里的 routes/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

我想从这里导出我的路由函数 routes/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

这里有几处错误。

首先,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