javascript 在NodeJS中未执行GET方法

jjjwad0x  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(140)

我有两个文件main.js和task.js,前者发送API调用到后者定义的所有方法。
这个main.js文件是

const express = require('express');
let app = express();
let port = 3000

let intro = require("./routes/task.js")

app.use("/",intro)
app.listen(port,()=> console.log("we are activated"))

task.js文件为

let express = require('express')
let route = express.Router();

route.get("",(req,res) =>
{
    res.status(200).send("Welcome")
})

route.get("hello",(req,res) =>
{
    res.status(200).send("We are in Hello page")
})

module.exports = route

现在,当我转到localhost:3000时,我得到了正确的输出,即打印了“welcome”。但是,当我导航到localhost:3000/hello时,我得到了如下错误

Cannot GET /hello

我认为在route中,无论我们在main.js中的base route和task.js中的route path中定义了什么,两者都会被连接起来,那么为什么我的get方法“hello”不起作用呢?

blmhpbnm

blmhpbnm1#

我认为它不起作用,因为您设置了使用intro的基本路径(/)。当我将其更改为以下内容时,它对我起作用:

const express = require('express');
let app = express();
let port = 3000

let intro = require("./routes/task.js")

app.use("",intro)
app.listen(port,()=> console.log("we are activated"))
let express = require('express')
let route = express.Router();

route.get("/",(req,res) =>
{
    res.status(200).send("Welcome")
})

route.get("/hello",(req,res) =>
{
    res.status(200).send("We are in Hello page")
})

module.exports = route
gxwragnw

gxwragnw2#

您仍然希望router.get位于router.get调用的路径上,因此:

router.get("/hello");

而不仅仅是router.get("hello")。(我已经在本地检查了这个问题,它修复了这个问题。)
您可以从路由器文档中的示例中看到这一点,该示例在路由器上使用/events,然后通过app.use("/calendar", router)挂载,这与您的用例非常相似:
一旦你创建了一个路由器对象,你就可以像一个应用程序一样向它添加中间件和HTTP方法路由(比如get、put、post等等)。

// invoked for any requests passed to this router
router.use(function (req, res, next) {
  // .. some logic here .. like any other middleware
  next()
})

// will handle any request that ends in /events
// depends on where the router is "use()'d"
router.get('/events', function (req, res, next) {
  // ..
})

然后,您可以使用路由器为特定的根URL,以这种方式将您的路由分离到文件,甚至迷你应用程序。

// only requests to /calendar/* will be sent to our "router"
app.use('/calendar', router)

相关问题