Javascript 如何使用不同的URL调用两个不同的模块。服务器继续发送第二个请求的第一个模块结果

Javascript 如何使用不同的URL调用两个不同的模块。服务器继续发送第二个请求的第一个模块结果,javascript,node.js,Javascript,Node.js,我对nodeJS是新手。我试图用单独的URL请求调用两个不同的模块,但服务器一直发送第一个模块的JSON数组,我如何解决这个问题 下面是app.js代码 const express = require('express'); const bearModeule = require('./bear'); const batModule = require('./bat'); const app = express(); app.use(express.json()); app.use('/',

我对nodeJS是新手。我试图用单独的URL请求调用两个不同的模块,但服务器一直发送第一个模块的JSON数组,我如何解决这个问题

下面是app.js代码

const express = require('express');
const bearModeule = require('./bear');
const batModule = require('./bat');

const app = express();
app.use(express.json());

app.use('/',bearModeule);
app.use('/bat',batModule);


const PORT = 3000;
app.listen(PORT, () => {
    console.log(`Listing on port ${PORT}`);
});
承载模块代码

let bear = function(req,res,next){

    let bearArray = [
        {id:1, name:"polar bear"},
        {id:2, name:"grizzly bear"},
        {id:3, name:"panda bear"}
    ]

    res.send(bearArray);
    next();
}

module.exports = bear;
let bat = function(req,res,next){

    let batArray = [
        {id:1, name:"black bat"},
        {id:2, name:"brown bat"}
    ]

    res.send(batArray);
    next();
}

module.exports = bat;
Bat模块代码

let bear = function(req,res,next){

    let bearArray = [
        {id:1, name:"polar bear"},
        {id:2, name:"grizzly bear"},
        {id:3, name:"panda bear"}
    ]

    res.send(bearArray);
    next();
}

module.exports = bear;
let bat = function(req,res,next){

    let batArray = [
        {id:1, name:"black bat"},
        {id:2, name:"brown bat"}
    ]

    res.send(batArray);
    next();
}

module.exports = bat;

只需在app.js中编写以下代码

const express = require('express');
const bearModeule = require('./bear');
const batModule = require('./bat');
const router = express.Router(); 
const app = express();

app.use('/', router);

app.get('/bear', bearModeule);
app.get('/bat', batModule);

const PORT = 3000;
app.listen(PORT, () => {
   console.log(`Listing on port ${PORT}`);
});
app.use()
将中间件指定为回调函数

我认为问题在于模块(bear和bat)的定义,模块应该处理两端的路由,使用express.Router类创建模块化的、可装载的路由处理程序

var express = require('express')
var router = express.Router()

// middleware that is specific to this router
router.use(function timeLog (req, res, next) {
  console.log('Time: ', Date.now())
  next()
})
// define the home page route
router.get('/', function (req, res) {
    let bearArray = [
        {id:1, name:"polar bear"},
        {id:2, name:"grizzly bear"},
        {id:3, name:"panda bear"}
    ]

    res.send(bearArray);
})

module.exports = router


在此处查看您的代码:

app.use('/',bearModeule); // this means return bearModeule for all requests at localhost:3000
app.use('/bat',batModule); // this means return batModule for all requests at localhost:3000/bat
app.use()定义了当相应路由匹配时要使用的中间件。当您点击localhost:3000/bat时,将触发bearModeule请求。您可以看到,控制台打印了一个错误,即发送头后无法设置头。这是因为您请求的路由已返回响应

您应该为bear模块指定不同的路线

app.use('/bear', bearModeule) 
或者,如果您想首先返回batModule,您可以更改路由顺序

app.use('/bat',batModule);
app.use('/', bearModeule);
这会起作用,但仍然不是正确的方法。
如果要将app.get定义为端点,还应使用app.get。

多谢策划者,这里有一个路由问题。