这是 Vercel 错误吗?找不到模块“./model”

时间:2021-02-07 18:29:49

标签: javascript node.js module vercel

我有 2 个文件:

  • controller.js
  • model.js

我正在制作一个 express.js 应用。

因此,GENERATE 内需要 model.js,但在调用 api 时出现此错误 image

日志是:

image

问题来了,'./model.js'确实存在,只是vercel不识别 并且在本地开发中运行良好,并且是正确的要求

这是controller.js

model.js

这是const { nanoid } = require("nanoid"); const getDateStr = () => { const now = new Date(); return `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`; } const Purchase = ({ id_user_buyer, id_user_seller, id_product, quantity }) => ( { id_user_buyer, id_user_seller, id_product, quantity, id_purchase: nanoid(), date: getDateStr(), } ); module.exports = { Purchase }

controller.js

如您所见,const err = require("../../../utils/error"); const { Purchase } = require("./model") // others modules and they are well imported, so the problem is './model' const userController = require("../user"); const productController = require("../product"); const cartController = require("../cart"); const TABLE = 'purchase'; function purchaseController(injectedStore) { // example code async function makePurchase(data) { const purchase = Purchase(data); await injectedStore.insert(TABLE, purchase); } return { makePurchase, } } module.exports = purchaseController; 很好地导入到 model.js 中我不知道为什么 vercel 说 controller.js 我再说一遍,在本地开发中可以正常工作,但在 vercel 中不行< /p>

快速解决方法是将 ERROR Cannot find module './model' 的所有代码复制并粘贴到 model.js 中。我试过了,我部署了他,并且成功了。 如果我只是评论导入 controller.js 的那一行,我所有的应用程序也能正常工作,但显然我的应用程序将不再具有该功能,所以第一个解决方案虽然丑陋但有效,但这些都不是最好的解决方案。最好的解决方案是正确导入文件

奇怪的事实 我尝试重命名文件,但也没有用。如果我导入一个新文件,它也不起作用。

注意我把nodejs版本从12改成了14,会不会有关系?

以防万一我把我的文件夹结构

image

api

image

这是我的./model

vercel.json

我不知道这是一个 vercel 错误还是我的错误。我的应用程序目前可以运行,但执行了我之前命名的技巧,即将 { "version": 2, "builds": [ { "src": "/api/index.js", "use": "@vercel/node" } ], "routes": [ { "src": "/api/auth(.*)", "dest": "/api/index.js" }, { "src": "/api/users(.*)", "dest": "/api/index.js" }, { "src": "/api/products(.*)", "dest": "/api/index.js" }, { "src": "/api/cart(.*)", "dest": "/api/index.js" }, { "src": "/api/purchases(.*)", "dest": "/api/index.js" }, { "src": "/api/sales(.*)", "dest": "/api/index.js" } ] } 的所有代码放入 model.js

感谢阅读整个问题。

1 个答案:

答案 0 :(得分:0)

好吧,我不知道为什么,但我认为这是一个 vercel 错误,我的问题的解决方案是不使用可选链。

controller.js 中,我有更多代码并且我使用了 optional chaining,只需更改逻辑即可正常工作。 Vercel 支持可选链接,但使用节点 14.x,我在 vercel 中使用节点 12.x,所以我将其更改为 14.x 并在其他文件中正常工作,但在 controller.js< /p>

因此,如果您使用 javascript 新事物,例如可选链、nullish operator 等。并且您在 vercel 中使用版本 12.x,则会产生错误。因此,您更改为节点 14.x,它也可能会给您带来错误。

所以你能做的最好的事情就是从一开始就确保你在 vercel 中有 14.x 版的 node.js

how to change node version in vercel