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
我正在尝试用 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