Javascript express中间件执行两次
我写了一个中间件来更新缓存中的一些变量,所以如果数据应该过期,它会被更新,但实际上会发生两次,而不是chrome,我使用的是firefox。 这是我的服务器js文件我将mustache express注释为模板,以确保不是因为它:Javascript express中间件执行两次,javascript,node.js,express,Javascript,Node.js,Express,我写了一个中间件来更新缓存中的一些变量,所以如果数据应该过期,它会被更新,但实际上会发生两次,而不是chrome,我使用的是firefox。 这是我的服务器js文件我将mustache express注释为模板,以确保不是因为它: const express = require('express') ; const path = require('path'); var mustacheExpress = require('mustache-express'); var request = r
const express = require('express') ;
const path = require('path');
var mustacheExpress = require('mustache-express');
var request = require('request');
var {updateAllDecks} = require('./utils/deck-request');
var cache = require('memory-cache');
const port = process.env.PORT || 3000;
var app = express();
// Register '.html' extension with The Mustache Express
app.engine('html', mustacheExpress());
app.set('view engine','mustache');
app.set('views', __dirname + '/views');
//const publicPath = path.join(__dirname, '/public');
//app.use('/', express.static(publicPath));
app.use(function (req, res, next) {
debugger;
updateAllDecks(next);
})
app.get('/', (req, res) => {
res.send('hola');
});
app.listen(port, () => {
console.log(`Server is up on port ${port}`);
});
因此,当我通过浏览器转到“/”时,应调用UpdateLocks:
var rp = require('request-promise-native');
var cache = require('memory-cache');
var {Deck} = require('../classes/deck');
var cacheDeck = require('./cache-decks');
var moment = require('moment');
var updateDeck = async (set,resolve) => {
//console.log(`${cacheDeck.getCachedExpirationDate(set)} > ${moment(Date.now()).unix()}`);
if (cacheDeck.getCachedExpirationDate(set) > moment(Date.now()).unix()) {
//let deck = await getDeckCached(set);
console.log('Cached Deck Back');
resolve();
} else {
let url = `https://playartifact.com/cardset/${set}/`;
console.log('Getting URL');
response = await rp({url:url, json: true});
var deck = new Deck(set, response.expire_time);
getDeckRequest(deck,response,resolve)
}
}
var getDeckRequest = async (deck, body,resolve) => {
console.log('Caching deck', deck);
response = await rp({url:body.cdn_root + body.url.substring(1), json: true});
deck.setName(response.card_set.set_info.name.english);
deck.setCards(response.card_set.card_list);
cacheDeck.addDeck(deck);
console.log(cacheDeck.getCachedDecksNames());
resolve();
}
var getDeckCached = (id) => {
return new Promise((resolve,reject) => {
resolve(cacheDeck.getCachedDeckById(id));
});
}
var updateAllDecks = (callback) => {
let decks = [0,1];
var request = decks.map((deck) => {
return new Promise( (resolve) => {
updateDeck(deck,resolve);
});
});
Promise.all(request).then(() => {
callback();
console.log('Finished');
});
};
module.exports = {updateAllDecks}
回调;UpdateAllecks函数中的下一个调用是advance以显示页面。在中间件函数中添加了这行代码,以了解调用的内容
console.log(req.method, req.path)
事实证明,这是从浏览器到服务器的调用,以获得使express调用中间件的favicon 在中间件函数中添加了这行代码,以了解调用的内容
console.log(req.method, req.path)
事实证明,这是从浏览器到服务器的调用,以获得使express调用中间件的favicon 你好@Roberto,看来你是智利人,我也是:……我认为导致这个问题的原因是对如何服务nodejs内容的一些误解。您正在同时使用express和http,不应该这样做。您应该使用express或http,因为express在后台使用http模块。你应该有应用程序。听着,就这样。请看下面的问答,以获得更多的澄清:@Hackerman si te entiendo perfectament y lo modifiquésolo para usar express y continua ejecutándose 2 veces.@Hackerman不过,我还是要尝试添加一个简单的中间件,也许它与承诺有关,接下来会被调用两次。期待下周的发布,这款游戏看起来棒极了@哈克曼找到了!!这是一个给favicon的电话,非常感谢您的时间嗨@Roberto,看来您来自智利,我也是:……我认为导致这个问题的原因是对如何为nodejs内容服务的一些误解。您正在同时使用express和http,不应该这样做。您应该使用express或http,因为express在后台使用http模块。你应该有应用程序。听着,就这样。请看下面的问答,以获得更多的澄清:@Hackerman si te entiendo perfectament y lo modifiquésolo para usar express y continua ejecutándose 2 veces.@Hackerman不过,我还是要尝试添加一个简单的中间件,也许它与承诺有关,接下来会被调用两次。期待下周的发布,这款游戏看起来棒极了@哈克曼找到了!!这是一个给favicon的电话,非常感谢您的时间谢谢,浏览器为我请求favicon,浏览器为我请求favicon