为什么我收到ReferenceError:未定义数据库

pbpqsu0x  于 2022-10-21  发布在  iOS
关注(0)|答案(1)|浏览(233)

由于某些原因,我无法让AXIOS连接到数据库。它是一个MSQL服务器,当我在服务器文件中使用app.get时,我可以得到返回的数据,但当我使用快速数据库连接时,它就不会持久。在Postman中,我可以返回一个结果,其中我在server.js上的所有代码都接收整个表。这就是我想要的。当将所有内容移动到AXIOS并将其路由到我的服务器上以减少代码时,不再返回任何内容。除了我得到ReferenceError:数据库没有在nodemon中定义之外,没有任何东西被破坏。
主页

const express = require('express')
const app = express()
const mysql = require('mysql')
const morgan = require('morgan')

//middleware
app.use(express.json())
app.use(morgan('dev'))

//Connect to DB
const db = mysql.createConnection({
    user     : 'root',
    password : '******',
    database : 'avengers'
})

db.connect((err) => {
    if(err){
        console.log(err)
    }
    console.log('MySql Connected...')
})

//Routes
app.use('/avengers', require('./routes/avengerRouter.js'))

//error handling
app.use((err, req, res, next) => {
    console.log(err)
    return res.send({errMsg: err.message})
})

app.listen(9000, () => {
    console.log("The server is running on port 9000")
})

Server.js

import React, {useState, useEffect} from 'react'
import axios from 'axios'
import AvengersTable from './AvengerTable.js'

function delay(time) {
    return new Promise(resolve => setTimeout(resolve, time));
}

export default function Main(){

    const [tableState, setTableState] = useState('')

    useEffect(() => {
        async function getTableData() {
            axios.get('/avengers')
            await delay(300)
            .then(res => {
                // setTableState(res.data)
                console.log(res)
            })
            .catch(err => console.log(err.response.data.errMsg))
        } getTableData()
    }, [])

    return (
        <div className="Main">
            {/* <AvengersTable tableState={tableState}/> */}
        </div>
    )
}

AvengerRouter.js

const express = require('express');
const avengerRouter = express.Router();

function delay(time) {
    return new Promise(resolve => setTimeout(resolve, time));
}

avengerRouter

    // all data from avengers table http://localhost:9000/avengers
    .get('/', (req, res) => {
        let sql = 'SELECT * FROM avengers.avengers'
        db.query(sql, (err, result) => {
            if(err) console.log(err)
            console.log(result)
        })
    })

module.exports = avengerRouter;
mqkwyuun

mqkwyuun1#

创建一个名为db.js的文件,该文件包含一个数据库连接。

const mysql = require('mysql')

const db = mysql.createConnection({
    user     : 'root',
    password : '******',
    database : 'avengers'
});

export default db;

HomePage上使用数据库

const db = require('./db.js');

db.connect((err) => {
    if(err){
        console.log(err)
    }
    console.log('MySql Connected...')
});

// Other codes goes below
...

最后在你的avengerRoute.js中使用

const express = require('express');
const avengerRouter = express.Router();
// Forgotten line here
const db = require('./db.js');

function delay(time) {
    return new Promise(resolve => setTimeout(resolve, time));
}

avengerRouter

    // all data from avengers table http://localhost:9000/avengers
    .get('/', (req, res) => {
        let sql = 'SELECT * FROM avengers.avengers'
        db.query(sql, (err, result) => {
            if(err) console.log(err)
            console.log(result)
        })
    })

module.exports = avengerRouter;

相关问题