Express和mysql。行未定义

时间:2018-05-25 06:38:42

标签: mysql node.js regex express

这是我的代码。我正在编写API,我想发送有关客户输入的产品的信息。

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

const app = express();

app.use(morgan('short'));
app.use(express.static('./public'));
// app.get('/', (req, res, next)=>{
//     res.send('Hello World');
// });
function getConnection(){
    return  mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password:'samsung793',
        database: 'demo2'

    })
}
app.get('/models/:id', (req, res, next)=>{
    console.log('Fetching id ' + req.params.id);
    const connection = getConnection();
    const queryStr = 'SELECT * FROM products WHERE id=?'

    const modelId = req.params.id;

    connection.query( queryStr, [modelId], (err, rows, fields)=>{
        if (err){
            res.send('<h1>500 bad request</h1> Error! Sorry for error, we are working on it!');
            res.sendStatus(500);
           return;
            //throw err;
        }
        console.log('Ready');
        res.json(rows);
    })
    // res.end();
})
app.get('/:name', (req, res, next)=>{
    console.log('Fetching name ' + req.params.name);
    const connection = getConnection();
    const queryStr = `SELECT * FROM products WHERE MATCH(name) AGAINST(${req.params.name}, in natural language)`


    const modelName = req.params.name;

    connection.query( queryStr, [modelName], (err, rows, fields)=>{
        if (err){
            res.send('<h1>500 bad request</h1> <h3>Error!</h3> <h4>Sorry for error, we are working on it!</h4>');
            res.sendStatus(500);
           return;
            //throw err;
        }
        console.log('Ready');
        res.json(rows);
        console.log(rows);

    })
    // res.end();
})
app.listen(3000, ()=>{
    console.log('server is listening on port 3000');
} )

当我登录控制行时,它是未定义的。我该如何解决?问题是什么? 对不起,第一篇文章。我现在编辑并添加所有代码。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

查询时需要检查是否发生错误

app.get('/:name', (req, res, next) => {
    console.log('Fetching name ' + req.params.name);
    const connection = getConnection();
    const queryStr = 'SELECT * FROM products WHERE MATCH(name) AGAINST(?, in natural language mode)';
    const modelName = req.params.name;

     connection.query( queryStr, [modelName], (err, rows, fields)=>{
        console.log('Ready');
        if(err) {
            console.log(err);
            return res.status(500).send(err);
        }
        console.log(rows);
        res.json(rows);
    })
})

如果您使用预备声明,则无需通过${req.params.name},只需通过?

答案 1 :(得分:0)

谢谢你的回答。我在这里编写代码以防有人需要它。 它的工作原理如下:

app.get('/:name', (req, res, next)=>{
    console.log('Fetching name ' + req.params.name);
    const connection = getConnection();
    const queryStr = `SELECT * FROM products WHERE MATCH(name, url) AGAINST(? IN NATURAL LANGUAGE MODE) `


    const modelName = req.params.name;

    connection.query( queryStr, modelName, (err, rows, fields)=>{
        console.log(rows);
        if (err){
            res.status(404).send(" Something went wrong");
            // res.sendStatus(500);

            throw err;
        }
        console.log('Ready');
        res.json(rows);


    })
    // res.end();
})