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?');
    }
}