gpt4 book ai didi

javascript - node.js - 第一个请求返回空白,第二个请求返回数据

转载 作者:行者123 更新时间:2023-11-29 07:32:56 24 4
gpt4 key购买 nike

我正在使用express、body-parser和mysql设置一个node.js api。

每当我第一次向路线发出 get 请求时,我都会得到空白返回。如果我第二次触发它,我就会得到期望的返回。

这是基本设置...

服务器.js

var express    = require('express');       
var app = express();
var bodyParser = require('body-parser');

// include the model
var Tasks = require('./models/tasks.js');


// configure api to use bodyParser()
// this will let us get the data from a POST
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var port = process.env.PORT || 8080;

var router = express.Router();

// middleware to use for all requests
router.use(function(req, res, next) {


// do logging
//console.log(req)
next(); // make sure we go to the next routes and don't stop here
});

router.route('/tasks')

// on routes that end in /tasks/:task_id
// ----------------------------------------------------
router.route('/tasks/:task_id')

// get the task by id (accessed as GET)
.get(function(req, res) {
Tasks.setProjectId(req.params.task_id);
Tasks.setResult(req.params.task_id);

var tasks = Tasks.getTasksByProjectId();

res.json(tasks);

});


app.use('/v1', router);

// START THE SERVER
app.listen(port);
console.log('Magic happens on port ' + port);

这是tasks.js

// include the db
require('../db.js');

var project_id, result;

module.exports.setProjectId = function(pid) {
project_id = pid;
}

module.exports.setResult = function(pid) {
//connection.connect();
connection.query('SELECT * FROM tasks WHERE project_id = ' + pid, function(err, rows, fields) {
if (err) throw err;
result = rows;
});
//connection.end();
}

module.exports.getTasksByProjectId = function(){
return result;
}

有什么想法为什么第一次请求时返回空白?

谢谢!

最佳答案

异步,异步,异步。

您正在尝试基于异步操作设置一个全局模块,该操作将在未来完成某个不确定的时间。

但是,在异步操作完成之前,您将尝试读取结果。因此,模块全局仍然是空的。

当您发出第二个请求时,第一个请求实际上已完成,您可以看到第一个结果。

您正在使用的整个模型根本无法工作。您无法发出异步请求,但请尝试同步使用它们。它根本不会那样工作。

所有异步操作的结果只能在异步操作完成时调用的回调中可靠地使用。不会将结果填充到全局变量中,因为您对操作何时完成的了解为零,并且读取全局变量是安全的。

.setResult() 需要采用一个回调函数,您可以在结果准备好时调用该函数,并且可以将结果传递给回调。这就是你得到结果的地方。您不会将其填充到全局模块中。

关于javascript - node.js - 第一个请求返回空白,第二个请求返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31979452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com