首页 > 解决方案 > TypeError:_this.callback 不是 NodeJS 中的函数

问题描述

无法使用 NodeJS 创建 POST 请求。收到错误“TypeError:_this.callback 不是函数”。

const vertica = require('vertica');
const express = require('express');
var app = express();
const bodyparser = require('body-parser');
var db = require('./db-connection')

app.use(bodyparser.json());

//Listening port
app.listen(3000, () => console.log('Express Server is running at port no. : 3000 '));

//Convert into query results into JSON
function mapToJSON(dbResult) {
const fieldNames = dbResult.fields.map(field => field.name) // List of all field names

return dbResult.rows.map(row => {
    return row.reduce((obj, item, index) => {
        const header = fieldNames[index]
        obj[header] = item
        return obj
    }, {})
})
}


//Get function 
app.get('/', (req, res) => {
db.query('select SUM(TOTAL_THROUGHPUT_RECEIVED)*(8/1024)/NULLIFZERO(SUM(COUNTER_THROUGHPUT_DL)) 
AVG_THROUGHPUT_DL from omniq.AGG_QICARE_ANALYZE_15_MIN WHERE PROCEDURE_TYPE = 816 and IMSI 
=515021161429077 ', (err, rows, fields) => {
    if (!err)
        res.send(mapToJSON(rows));
    else
        console.log(err)
})
});

app.post('/avgthrptDL', (req, res) => {
var IMSI = req.body.IMSI;
var PROCEDURE_TYPE = req.body.PROCEDURE_TYPE;

console.log("IMSI " + IMSI + " PT " + PROCEDURE_TYPE)

db.query('select SUM(TOTAL_THROUGHPUT_RECEIVED)*(8/1024)/NULLIFZERO(SUM(COUNTER_THROUGHPUT_DL)) 
AVG_THROUGHPUT_DL from omniq.AGG_QICARE_ANALYZE_15_MIN WHERE PROCEDURE_TYPE = ? and IMSI = ?', 
[IMSI, PROCEDURE_TYPE], function (err, results) {
     if (err) 
   res.status(500).json({error: err});
else
res.status(200).json(results);
});
});

当我运行上面的代码时。我收到此错误“TypeError:_this.callback 不是函数”。我该如何克服呢?我想通过 JSON 发送 PROCEDURE_TYPE 和 IMSI 详细信息。无法得到任何回应。 错误

标签: javascriptnode.js

解决方案


发生此错误callback是因为从未声明您的函数。

我认为而不是返回您的值,您应该像这样发送 JSON 响应:

res.status(200).json(results);

而且您还需要一个“else”,因为如果出现任何错误,您将发送两次响应。

db.query('<your SQL query>', function (err, results) {
    if (err) {
        res.status(500).json({error: err});
    }
    else {
        res.status(200).json(results);
        // return callback(results); // Error occured here
    }
});

希望能帮助到你。


推荐阅读