首页 > 解决方案 > 将mysql查询返回到nodejs flash消息

问题描述

我正在寻找按办公室号码查询跟踪号码。然后将跟踪号传递给帖子中的 req.flash。我能够将数据记录到控制台,但在将其返回到我的主节点程序时遇到问题,因此我可以在 req.flash 消息中使用该数据。如何将查询结果发送到主 javascript 程序,以便我可以在 req.flash 中刷新查询结果?

我试过几个不同的电话。

这是我从控制台的输出

[nodemon] starting `node src/server.js`
body-parser deprecated undefined extended: provide extended option src\server.js:20:14
App running at http://localhost:3000
Sanitized: { officeNumber: '1212' }
the output is 0
result from db is :  12121212121212
result from db is :  124563356743435
result from db is :  354466436646464
result from db is :  363548367868575

路由.js

const express = require('express')
const router = express.Router()
const { check, validationResult } = require('express-validator/check')
const { matchedData } = require('express-validator/filter')
var mysql   = require('mysql'),
    config  = require("./config");

    var con = mysql.createConnection(config.db);



router.post('/trackingnumbers', [
  check('officeNumber')
    .isLength({ min:4, max:4  })
    .withMessage('That office Number doesn‘t look right')
    .trim()
], (req, res) => {
  const errors = validationResult(req)
  if (!errors.isEmpty()) {
    return res.render('trackingnumbers', {
      data: req.body,
      errors: errors.mapped()
    })
  }

  const data = matchedData(req)
  console.log('Sanitized:', data)
var mysql_query3 = require('./mysql_query.js');
//////////////////////////////////////////////////////////
output = "0";



function getTrackingNumbers(officeN, callback)
{
    con.query('SELECT * from trackingnumbers where office_Number = ' + officeN, function(err, result)
    {
        if (err) 
            callback(err,null);
        else
            //console.log(result);   

            for (var i = 0; i < result.length; i++) {
              //  console.log(result[i]);
                //callback(null,result[i]);
                callback(null,result[i].tracking_Number);
            }

    });

}


//call Fn for db query with callback
 getTrackingNumbers(req.body["officeNumber"], function(err,data1){
        if (err) {
            // error handling code goes here
            console.log("ERROR : ",err);            
        } else {            
            // code to execute on data retrieval
            console.log("result from db is : ",data1);
            return data1;
        }    

});
/////////////////////////////////////////////////////////////////////////////
console.log("the output is " +  output);
  req.flash('success', 'Thanks your super cool has been inputted' + output)
  //can do 2 flashes here if need to

  res.redirect('trackingnumbers')
})





module.exports = router

标签: javascriptmysqlnode.jsexpress

解决方案


你能试试这个

getTrackingNumbers(req.body["officeNumber"], function(err,data1){
    if (err) {
        // error handling code goes here
        console.log("ERROR : ",err);            
    } else {            
        // code to execute on data retrieval
        console.log("result from db is : ",data1);
        req.flash('success', 'Data' + data1);
        return data1;
    }    
});

由于 Node 是异步的,我们只会在回调中获取数据。


如果您想在重定向后显示消息闪烁,您可以将数据作为查询参数传递

res.redirect('trackingnumbers/?message=The office number is '+data )

然后在路由方法的主体中,我们可以检查查询参数“消息”并闪烁消息。

if (typeof req.query.message !== 'undefined' && typeof req.query.message.trim() != "") {
    req.flash('success', req.query.message)
}
const data = matchedData(req)
console.log('Sanitized:', data)

推荐阅读