Javascript 在服务器上只运行一次某些代码的最佳方法是在Nuxt.js中启动(而不是在构建期间)

Javascript 在服务器上只运行一次某些代码的最佳方法是在Nuxt.js中启动(而不是在构建期间),javascript,vue.js,nuxt.js,nuxtjs,Javascript,Vue.js,Nuxt.js,Nuxtjs,在编写时,我遇到了一个问题,即当服务器启动时(或在服务器启动时),我希望在Nuxt.js中只执行一次代码 我曾考虑编写一个模块或插件,但没有成功,因为每次我联系服务器时,即每次我调用localhost:3000/myPage时,都会执行这两个模块或插件。 可能我缺少正确的模块挂钩或插件设置 因为我在官方文档中找不到关于这个问题的任何信息,所以我现在想出了一个非常糟糕的解决方案:我编写了一个服务器中间件,它执行一些代码(应该只运行一次的代码),然后返回一个空的处理程序,这会给每个请求增加(很少)不

在编写时,我遇到了一个问题,即当服务器启动时(或在服务器启动时),我希望在Nuxt.js中只执行一次代码

我曾考虑编写一个模块或插件,但没有成功,因为每次我联系服务器时,即每次我调用localhost:3000/myPage时,都会执行这两个模块或插件。 可能我缺少正确的模块挂钩或插件设置

因为我在官方文档中找不到关于这个问题的任何信息,所以我现在想出了一个非常糟糕的解决方案:我编写了一个服务器中间件,它执行一些代码(应该只运行一次的代码),然后返回一个空的处理程序,这会给每个请求增加(很少)不必要的开销

我的问题:在启动期间/之后,而不是在构建期间,在Nuxt.js服务器上执行一次代码的最佳方式是什么


最简单的工作示例:

numxt.config.js

export default {
  ...
  serverMiddleware: [ "~/serverMiddleware/run-once.js" ]
  ...
}
console.log("Yay, I only run once when the server is started!")
// Since we are a serverMiddleware, we have to return a handler, even if this it does nothing
// I think this is really ugly...
export default function (req, res, next) {
  next()
}
~/serverMiddleware/run once.js

export default {
  ...
  serverMiddleware: [ "~/serverMiddleware/run-once.js" ]
  ...
}
console.log("Yay, I only run once when the server is started!")
// Since we are a serverMiddleware, we have to return a handler, even if this it does nothing
// I think this is really ugly...
export default function (req, res, next) {
  next()
}

PS:我看到了这样的问题,但它似乎没有回答我的问题,因为每当我向服务器发送请求时,
vue呈现程序:ssr:prepareContext
nuxt钩子也会执行

此外,以下模块不起作用,因为它也在
numxt build
期间执行,并且不仅在
numxt dev
numxt start
上执行:

export default function MyModuleThatShouldOnlyRunOnce (_moduleOptions) {
  console.log("I run on 'nuxt dev' and 'nuxt start', but sadly also on 'nuxt build' :(");
}

试过钩子吗@伊法鲁基:是的,但我似乎还没有找到合适的钩子。我不希望在生成期间运行代码,但希望在服务器启动时运行代码。生成:之前?这个钩子?@Ifaruki没有,因为我不想在
nuxt构建期间执行代码,而只想在
nuxt start
nuxt dev
上执行代码<代码>“build:before”
,顾名思义,是在生成之前执行的。@tony19我感谢您的帮助。但是,我希望能够在
numxt start
上只运行一次代码,即启动服务器时的一次。每次设置vuex存储时,即每次用户请求页面时,都会执行
nuxtServerInit
方法。这不是我的用例。