javascript - 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 详细信息。无法得到任何回应。 错误
解决方案
发生此错误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
}
});
希望能帮助到你。
推荐阅读
- c++ - SDL + OpenGL ES 2.0 使用着色器显示纹理
- java - 我的项目中缺少什么注释?
- mysql - AWS RDS mysql LOAD DATA INFILE 上的错误 1045 (28000)
- c - 使用 RSA_private_decrypt() 解密二进制文件
- javascript - 在两个(或 n 个)脚本之间进行通信 - 事件
- java - 使用自动生成的代码创建一个常见的 Spring Boot 项目
- php - 如何通过 google-api-php-client 使用沙盒
- reactjs - 由于以下错误,WebPack SockJS 构造失败:“可能无法从通过 HTTPS 加载的页面启动不安全的 SockJS 连接”
- wordpress - 使用 wp Rocket 排除缓存功能
- java - 如何在 AsyncTask 中获得速度?