我是新来的。针对类似问题发布了几个解决方案,但没有一个有帮助。我在下面发布了一个非常简单的玩具示例,可以帮助您进行调试。
索引.js
const express = require('express')
port=3001
var controller = require('./controller');
app.use('/api', controller);
Run Code Online (Sandbox Code Playgroud)
控制器.js
var model = require('./model')
var router = express.Router();
router.get('/bl', function(req, res) {
model.getData( function (err, objects) {
if(err) return res.send(err);
return res.status(200).json(objects);
});
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
模型.js
const bl = {"hello":"world"}
const getData= (request, response) => {
return(bl);
}
module.exports = {
getData
}
Run Code Online (Sandbox Code Playgroud)
问题:调用:http://localhost:3001/api/bl => 无响应,控制台:无错误
笔记:
在我的model.js 中,我在Postgres 数据库中查询,我可以在console.log 中看到结果。
但是当我尝试在 controller.js 中使用 console.log 查看数据时,我没有看到任何这样的结果。我在上面的玩具示例中观察到的类似行为
您需要第三个参数,您通常会看到callback或只是cb在函数中执行它并向其传递一些数据。第一个参数false将是稍后的错误参数,bl并将是objects传递的参数
const getData= (request, response, callback) => {
callback(false, bl);
}
Run Code Online (Sandbox Code Playgroud)
然后将参数传递req给res它:
model.getData(req, res, function (err, objects) {
if(err) return res.send(err);
return res.status(200).json(objects);
});
Run Code Online (Sandbox Code Playgroud)
或者用现代的方式与async / await你一起做这件事可以返回一个承诺
const getData= (request, response) => {
return new Promise((resolve, reject) => {
if(someErrorAppear){
reject("some error occured");
}
resolve(bl);
})
}
Run Code Online (Sandbox Code Playgroud)
现在你可以去async / await
router.get('/bl', async function(req, res) {
try {
let objects = await model.getData(req, res);
res.status(200).json(objects);
}catch(err){
res.send(err);
}
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |