好的,有人指出这应该很容易。
我检查了其他类似的问题,没有人帮忙。
我正在尝试将所有路由移动到单独的routes.js
文件中。在其中我有:
module.exports = function (app) {
var user = {
list : require('./routes/user.js')
}
, index = {
index : require('./routes/index.js')
}
app.get('/', function(request, response){
response.send('You made it to the home page.')
});
app.get('/users', user.list);
}
在我的app.js
文件中,我有这个:
var register_routes = require('./routes.js')
register_routes(app)
我的索引路由工作正常,但它会在app.get('/users', user.list);
上重新启动此错误:
.get()需要回调函数,但得到了[object Object]
这是一个开箱即用的快递应用程序,因此不能描述太多。
感谢。
编辑:每个请求,这里是./routes/user.js
:
exports.list = function(req, res){
res.send("respond with a resource");
};
答案 0 :(得分:18)
使用具有您的函数值的键list
导出对象。
因此,要访问您的功能,您需要执行此操作require('./routes/user.js').list
或使用您的代码user.list.list
。
要解决这个问题,你有两种可能性。
写一下:
var user = {
list : require('./routes/user.js').list
}
或者:
module.exports = function(req, res){
res.send("respond with a resource");
};
修改强>
如果您的routes/user.js
稍后可能会显示如下:
module.exports.list = function(req, res){
res.send("respond with a resource");
};
module.exports.delete = function(req, res){
res.send("delete user");
};
如果是,那么你可以在routes.js
:
var user = require('./routes/user.js');
答案 1 :(得分:1)
我认为你想要的是:
module.exports = function (app) {
var user = {
list : function(request, response){
require('./routes/user.js');
}
}
}
, index = {
index : function(request, response){
require('./routes/index.js')
}
}
app.get('/', function(request, response){
response.send('You made it to the home page.')
});
app.get('/users', user.list);
}
以这种方式给路由回调,这个回调执行require。
答案 2 :(得分:0)
如果您在应用程序中使用路由器进行所有路由,
var express = require('express');
var router = express.Router();
var index = require('./index');
/* GET home page. */
router.get('/', index.list);
module.exports = router;
然后在index.js文件中,执行
router.list = function(req, res){
res.send("respond with a resource");
};
答案 3 :(得分:0)
在网上搜寻了很多时间之后,我发现了一些东西。
首先,您将这样的代码实例化到另一个文件上(例如:humancomms.ts):
import express from 'express';
export function shout(request: express.Request, response: express.Response, next: () => void) {
response.send('Shout so loud!');
}
export function speak(request: express.Request, response: express.Response, next: () => void) {
response.send('Speak less loud!');
}
此代码的作用是什么?没人知道。(嘿,开个玩笑)
这使中间件功能可以从主服务器文件中分离出来,以便进行……组织。
我们如何使用它?就是这样(在服务器文件中):
const shout = require('./humancomms').shout;
const speak = require('./humancomms').speak;
app.use('/shout', shout);
app.use('/speak', speak);
此代码采用所有中间件函数,并在调用某些路径时执行。
这不能解决所有问题,例如同一类型的多路径,就好像您要调用不同强度的喊叫('/ shout / high?asd = asd','/ shout / low?asd = asd')一样,但是是一个陷阱,您可以尝试使用辅助文件:
import express from 'express';
export function shout(request: express.Request, response: express.Response, next: () => void) {
if (request.path.includes('/high')) {
response.send('Shout so loud!');
} else if (request.path.includes('/low')) {
response.send('Really shout?');
}
}
看这篇关于以下内容的好文章
:TypeScript Express教程#1。中间件,路由和控制器(https://wanago.io/2018/12/03/typescript-express-tutorial-routing-controllers-middleware/)
和官方文档网站:
编写用于Express应用(http://expressjs.com/en/guide/writing-middleware.html)的中间件