Javascript 如何使用不同的URL调用两个不同的模块。服务器继续发送第二个请求的第一个模块结果
我对nodeJS是新手。我试图用单独的URL请求调用两个不同的模块,但服务器一直发送第一个模块的JSON数组,我如何解决这个问题 下面是app.js代码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('/',
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。多谢策划者,这里有一个路由问题。