因此,我声明了一个应该可以在任何地方使用的变量:
trim()
我在这里使用它:
ctype_space()
在第一次加载时,它在我的视图中来回运行时效果很好,但是一旦刷新几次,它就会崩溃并说“ mobs undefined”:这是完整的错误日志:
if (empty($string) || preg_match("/^[\pZ\pC]+$/u", $string)) {
我只是不明白。我不知道它在大多数情况下是如何工作的,然后经过几次刷新后,突然间突然崩溃了。
答案 0 :(得分:1)
这里的问题是执行顺序不能保证,您可以在查询完成之前调用next()。实际上,我们正在使用db查询在next()中加速代码。
这就是未定义生物的原因,查询有时尚未完成。
我建议仅在查询完成后再呼叫下一个。例如
// Global Variables
app.use(function (req, res, next) {
// Mob Database
db.query('SELECT * FROM mobs').then(results => {
req.mobs = results;
res.locals.mobs = req.mobs;
// Now it's safe to call next.
next();
}).catch((err) => {
console.error('Error occurred during query: ', err);
// Consider sending back a 500 here.
})
});
答案 1 :(得分:0)
而不是使用这种方法来全局保存和检索数据。创建一个单独的地图,该地图将存储在当前会话中,并创建一条要在其中显示该数据的路线。
map.js
var hashmapSession = {};
exports.sess = {
set : function(key, value){
hashmapSession[key] = value;
},
get : function(key){
return hashmapSession[key];
},
delete : function(key){
delete hashmapSession[key];
},
all : function(){
return hashmapSession;
}
};
现在使用您现有的代码从数据库中获取数据,但是使用上面的映射将其保存到res.locals
。例如:
var hashmap = require('./hashmap');
app.use(function (req, res, next) {
// Mob Database
db.query('SELECT * FROM mobs').then(results => {
if(results)
hashmap.sess.set('global', results);
});
next();
});
现在创建一个端点以呈现保存的数据。例如:
app.get('/showData', function(req, res){
var data = hashmap.sess.get('global');
res.render('main', data);
})
注意:这里'main'是您的main.ejs文件。