Javascript 快速路由:.get()需要回调函数,但得到了一个[object]
好的,这应该很容易被人指出 我检查了其他类似的问题,但没有任何帮助 我正在尝试将所有路由移动到一个单独的Javascript 快速路由:.get()需要回调函数,但得到了一个[object],javascript,express,Javascript,Express,好的,这应该很容易被人指出 我检查了其他类似的问题,但没有任何帮助 我正在尝试将所有路由移动到一个单独的routes.js文件中。其中我有: module.exports = function (app) { var user = { list : require('./routes/user.js') } , index = { index : require('./routes/index.js') } app.get('/',
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]
这是一款开箱即用的express应用程序,因此没有太多内容可描述
谢谢
编辑:根据请求,以下是/routes/user.js
中的内容:
exports.list = function(req, res){
res.send("respond with a resource");
};
我想你想要的是:
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。您导出一个对象,该对象的键
list
将您的函数作为值
因此,要访问您的函数,您需要执行以下操作:require('./routes/user.js')。list
或者使用您的代码user.list.list
要解决这个问题,有两种可能
要么写:
var user = {
list : require('./routes/user.js').list
}
或:
编辑
如果您的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');
如果您在应用程序中使用路由器,用于所有路由目的
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");
};
在网上找了这么久之后,我发现了一些东西
首先,在另一个文件(例如:humancomms.ts)上实例化如下代码:
这个代码到底是做什么的?没人知道。(呵呵,开玩笑)
这使得中间件的功能从主服务器文件分离到。。。当然是组织
我们如何使用它?如下所示(在服务器文件中):
此代码接受所有中间件函数,并在调用某个路径时执行
这并不能解决所有问题,例如同一类型的多路径问题,就好像您希望调用不同强度的shout(“/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。中间件、路由和控制器()
以及官方文件网站:
编写在Express apps中使用的中间件()如何看待/routes/user.js
呢?请在'./routes/user.js'
中发布代码。您只需要导出一个连接中间件函数,但您可能正在导出一个设置
类型函数。那么请求
,响应
应该如何在/routes/user.js
中调用<代码>要求('./routes/user.js')代码>只包含文件,但不调用路由代码。这样,请求将不做任何事情而超时。是的,这是向前迈出的一步。它不再出错,但它最终会超时,并且什么也不做。在这种情况下,我们正在尝试创建多路由文件。我们需要在./routes/user.js中添加“更具体”的路由。
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);
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?');
}
}