2
我正在尝试为我的应用实施搜索功能。我有一个快速路线来获取搜索条件。读取要在快速路径中使用的文件
这里是我的路由器文件的全部内容:
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
var searchutil = require('../utils/searchhandler');
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({
extended: true
}));
router.post('/api/search', (req, res, next) => {
var term = req.body.searchTerm;
console.log(term);
searchutil();
res.json({test: 'post received'});
});
module.exports = router;
在此可以被包括在我的路由器我searchhandler文件:
var fs = require('fs');
var findResults = function() {
var items = fs.readFile('./server/assets/items.json', 'utf8', (err, data) =>{
if (err) throw err;
console.log(JSON.parse(data));
return JSON.parse(data);
});
}
module.exports = findResults;
这是所有工作只是罚款和花花公子。它基本上只在打出'/api/search'
的发布请求路由时在服务器上打印出'./server/assets/items.json'
的内容。我的问题是关于在我的路由器文件中使用json文件。说我的路由器文件是:
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
var fs = require('fs');
var items = fs.readFile('./server/assets/items.json', 'utf8', (err, data) =>{
if (err) throw err;
console.log(JSON.parse(data));
return JSON.parse(data);
});
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({
extended: true
}));
router.post('/api/search', (req, res, next) => {
var term = req.body.searchTerm;
console.log(term);
console.log(items);
res.json({test: 'post received'});
});
module.exports = router;
所以现在我的路由器文件获取文件的资产,并试图对我router.post('/api/search', ...);
函数中打印出来。发生的问题是,当它尝试使用该功能打印items
时似乎是undefined
,但fs.readFile();
中的打印正确记录了该文件的内容。我认为这是我遇到的一些范围问题,但我不知道如何向自己解释它,所以我想在这里问它为什么它以一种方式工作,而不是另一种方式。
项目是异步设定因此其价值没有被设置为它印 – pwilmot
你可以在时间使用承诺,并等待项目被设置,虽然 – pwilmot
@pwilmot - 这是我的想法,但在我的路由器文件的第二版本,它打印在'console.log(JSON.parse(数据) );调用post函数中的'console.log(items);'之前。如果它已成功打印在readFile函数中,它不应该已经为post函数设置了它吗? – httpNick