我不明白为什么该函数执行了 2 次。发布了发生此错误的整个函数。我将非常感谢您的帮助!
async function routes(fastify, options) {
try {
let dir = './controller'
var getFiles = function (dir) {
let apiFiles = fs.readdirSync(dir);
for (let file in apiFiles) {
let name = dir + '/' + apiFiles[file];
if (fs.statSync(name).isDirectory()) {
getFiles(name, commandFiles);
} else {
commandFiles.push(name);
const command = require(`${name}`);
let url = name
.replace('./controller/', "/")
.replace('.js', "")
.replace('index', "")
.replace(/\[/g, ":")
.replace(/\]/g, "")
fastify.route({
method: command.method,
url: url,
preHandler: async (request, reply, done) => {
await oauth.check(command, request, reply);
done()
},
handler: async (request, reply) => {
await command.execute(request, reply) // выполняется последовательно 2 раза
}
})
console.log(` dir: ${name} | url: ${url} | method: ${command.method}`)
}
}
}
getFiles(dir);
} catch (err) {
console.error(err);
}
}
您的控制器
/admin/account/reg
属于功能sha1
并最终出现在catch
控制器块中。由于catch
它不以任何方式处理请求,因此该命令返回Promise -> undefined
. 这种情况在 docs 中有描述Fastify
。您所需要的只是从
Promise
. 例如:也影响召回
preHandler
。因为它是异步的,加上您正在调用done()
,因此无需等待 resolvepreHandler
。因此,它第一次在 call 上工作,done()
第二次在Promise.resolve
. 奇怪的是,api
这允许它。