首页 > 解决方案 > 如何使用 Express 路由器通过 index.js 查找函数(GET、POST、...)?

问题描述

我想在 Express 中安装一个路由器。我遵循了一个很好的教程,但我的代码仍然找不到我的函数 get/users。

当我将它放在 index.js 上时,我的功能有效

index.js:

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

const users = require('./api/user');
app.use('/users', users);

./api/user.js :

const {user, validate} = require('../models/user');
const mongoose = require('mongoose');
const express = require('express');
const router = express.Router();
const mysql = require('mysql')

const connection = mysql.createConnection({
    host: 'localhost',
    user:'root',
    password: 'root',
    database: 'mf_consultation' 
});

router.get('/users', (req, res) => {
    console.log("Enter in get request");
    const queryString = "SELECT * FROM user"
    connection.query(queryString, (err, rows, fields) => {
        if(error) return res.status(400).send(result.error.details[0].message);
        console.log("I think we fetched users successfully");
        res.json(rows);
    });
});

module.exports = router;

我在邮递员上有这个结果

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>Error</title>
</head>

<body>
    <pre>Cannot GET /users</pre>
</body>

</html>

我的控制台没有显示 console.log “输入获取请求”。

你有想法吗?先感谢您。

标签: javascriptnode.jsexpressreact-router

解决方案


在您的index.js中,您已指定:

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

这意味着任何以开头的路由/users都应该在users路由器内部处理。

然后,在你的users.js,你有这个:

router.get('/users', (req, res) => {
  // code here
}

这意味着您的 express 应用程序将处理/users/users而不是仅处理/users. 第一个/users引导您的 express 应用程序使用您的user路由器,而第二个/users引导您的user路由器使用GET路由器内部定义的功能。

如果您只想使用 来访问控制器/处理程序/users,有两种方法:

  1. 在你的定义这个index.js
app.get('/users', (req, res) => {
  // code here
});
  1. 在您的用户路由器中替换您router.get('/users', ...的。router.get('/', ...

两种方式都应该有效,只是代码库的结构会发生一些变化。


推荐阅读