pg-promise db调用返回'then'函数中未定义的

时间:2018-09-18 17:23:17

标签: javascript node.js postgresql

我是Postgres和Promise的新手,我在无法使用express的课程中这样做。我有一台允许与Heroku节点pg-promise数据库进行交互的服务器。我正在尝试通过发布请求插入数据,而在此过程中,插入数据库后,我无法使端点返回结果查询。

这是我的终点:

var server = http.createServer(function(req, res){
let uri = url.parse(req.url, true)
switch(uri.pathname){
    case '/':
        sendFile(res, 'public/index.html')
        break
    case '/index.html':
        sendFile(res, 'public/index.html')
        break
    case '/getRows':
        getRows().then((rows) => {
            res.end(JSON.stringify(rows))
        })
        break
    case '/addRow':
        console.log("adding row")
        addRow(req).then((rows) => {
            console.log('adding: ' + JSON.stringify(rows))
            console.log('\nadding: ' + rows.id)
            res.end(JSON.stringify(rows))
        })
            .catch(e =>{
            console.log(e.stack)
            return {'status': 'failure', 'message': e.stack}
        })
        break
    default:
        console.log("default path")
        res.end('404 not found')
}

这是数据库函数:

async function getRows(){
try{
    return await db.any('SELECT * from grades')
} catch(e){
    console.log(e.stack)
}}

async function addRow(req){
let body = []
req.on('data', (chunk) => {
    body.push(chunk)
}).on('end', () => {
    body = Buffer.concat(body).toString()
    return process(JSON.parse(body))
})
async function process(obj) {
    console.log("before generating id")
    let id = generateId()
    return await db.one('INSERT INTO grades VALUES($1, $2, $3, $4) RETURNING *',
        [id, obj.student, obj.item, obj.grade])
}}

“ RETURNING *”应该返回我插入的行,但是我的console.logs告诉我/ addRow端点中的“ rows”对象是未定义的,或者如果我尝试访问'id',它将返回未定义的。 / getRows端点正常工作,甚至显示插入的行。如何获取/ addRow端点以返回添加的行?我的理解是.then()是查询返回时的回调,它甚至适用于getRows,所以为什么它不适用于此查询?

编辑:我认为这与以下事实有关:当我完成对请求体的处理时,我不会在匿名函数中返回“ await process(...)”。我尝试使该异步并返回await process(),但仍然出现相同的错误。

0 个答案:

没有答案