我正在尝试使用 express.js 创建一个简单的 rest api。我正在使用 babel,所以我可以使用 es6 语法。最初我在 server.js 中有我的路由逻辑并且一切正常。我想重组我的路线并将它们放入外部文件,然后将它们导入我的 server.js。我在导入后使用 app.use('/', routes)
在 server.js 中运行它们。我无法让它工作。当我在 postman 中检查路线时,它就挂了。我花了很多时间在 stackoverflow 上并阅读其他文章,试图找出如何在我的 server.js 文件中导入和使用外部文件。看起来应该很简单,但我无法让它工作。另外,在我切换到 babel 之前,我尝试用 require() 和 exports.module 做同样的事情,但它仍然没有用。
服务器.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} `);
});
索引.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
关于javascript - 当 app.use 使用导入的中间件功能时,express.js api 请求挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56810925/