2017-09-09 97 views
0

我使用koa作为休息后端,但我无法使路由和请求/响应正常工作,当使用axios调用URL时,承诺是失败。koa js异步等待与ajax和承诺时不工作

server.js

const route = require('koa-route'); 
const serve = require('koa-static'); 
const Koa = require('koa'); 
const app = new Koa(); 
const path = require('path'); 
const bodyParser = require('koa-bodyparser'); 
const Datastore = require('nedb'), 
     db = new Datastore({ 
      filename: __dirname +'/storage.db' , 
      autoload: true 
     }); 
// something 
app.use(bodyParser()); 

app.use(serve(__dirname + '/dist')); 

app.use(route.get('/api/projects', async function (next) { 
    let projects = []; 
    await db.find({}, function (err, docs) { 
     projects = docs; 
    }); 

    this.body = projects; 
})); 

const PORT = process.argv[2] || process.env.PORT || 3000; 
app.listen(3000); 

,当我提出一个要求使用爱可信我得到空数组

从我的package.json到/ API /项目

"scripts": { 
    "start": "nodemon server.js --exec babel-node --presets es2015,stage-2" 
    }, 

回答

0

你混合承诺和回调,这很可能导致你的问题。

坚持使用承诺:

app.use(route.get('/api/projects', async function (next) { 
    let projects = await db.find({}); 
    this.body = projects; 
})); 
+0

nedb不退出支持该结构的,我已经更新了代码,但我现在越来越未捕获的(以诺)类型错误:this.props.project.map不作为错误的函数 –

+0

如果它不支持承诺,则不能(直接)使用'await'。你需要像''nedb-promise'](https://github.com/jrop/nedb-promise)这样的东西来包装带有promise的NeDB方法。 – robertklep