【问题标题】:Express Router unable to route to another folderExpress 路由器无法路由到另一个文件夹
【发布时间】:2020-02-06 19:25:53
【问题描述】:

我正在尝试使用 mongoDB 创建一个 Node JS 应用程序。从主 app.js 我试图重定向到另一个名为“服务”的文件夹。这是我的文件夹结构 -

这是我的 app.js -

const express = require('express')
const mongoose = require('mongoose')
const dotenv = require('dotenv')
const cors = require('cors')
const bodyParser = require('body-parser')
const app = express()
const users = require('./userSchema')
const services = require('./services/index')
app.use('/services', express.static('/services'))
app.use(express.static('/'));
app.use(cors())
dotenv.config()
const port = 3000

mongoose.connect(process.env.DB_CONNECT,
    {
        useUnifiedTopology: true,
        useNewUrlParser: true,
        useFindAndModify: false
    })
    .then(() => console.log('Connected to mongoDB'))
    .catch(err => console.error('Could not connect to MongoDB..', err))
const jsonParser = bodyParser.json()

app.get('/allName', async (req, res) => {
    let data = await users.find()
    res.status(200).send(data)
})
app.listen(port, () => console.log(`Demo app listening on port ${port}!`))

这是我在 services 文件夹中的 index.js 文件 -

var express = require('express')
var router = express.Router()
router.get('/', function (req, res) {
  res.send('Birds home page')
})

router.get('/about', function (req, res) {
  res.send('About birds')
})

module.exports = router

在运行 http://localhost:3000/allName 时,它运行良好。但是如果我尝试运行http://localhost:3000/services,它会抛出Cannot GET /services。我无法解决这个问题。

当用户触发http://localhost:3000/services时如何从app.js重定向到index.js?

【问题讨论】:

标签: node.js express express-router


【解决方案1】:

改变

app.use('/services', express.static('/services'))

进入

app.use('/services', services);

express.static 用于提供静态文件,看起来您希望使用路由器而不返回静态文件。这就是为什么服务器没有按照你喜欢的方式响应

【讨论】:

    【解决方案2】:

    是的,因为您没有正确添加服务路由的引用。
    从引用中删除 express.static 因为您已经在变量中导入了服务路由,然后只需使用它,它就会按预期工作。 只是一个注释。 Express.static 用于加载/使用静态文件,如 css 或图像或类似的东西。 检查下面的代码。

    const express = require('express')
    const mongoose = require('mongoose')
    const dotenv = require('dotenv')
    const cors = require('cors')
    const bodyParser = require('body-parser')
    const app = express()
    const users = require('./userSchema')
    const services = require('./services/index')
    **app.use('/services', services)** // change this into your code.
    app.use(express.static('/'));
    app.use(cors())
    dotenv.config()
    const port = 3000
    
    mongoose.connect(process.env.DB_CONNECT,
        {
            useUnifiedTopology: true,
            useNewUrlParser: true,
            useFindAndModify: false
        })
        .then(() => console.log('Connected to mongoDB'))
        .catch(err => console.error('Could not connect to MongoDB..', err))
    const jsonParser = bodyParser.json()
    
    app.get('/allName', async (req, res) => {
        let data = await users.find()
        res.status(200).send(data)
    })
    app.listen(port, () => console.log(`Demo app listening on port ${port}!`))
    

    【讨论】:

    • 它工作正常。谢谢。我无法将多个标记为已接受答案
    猜你喜欢
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多