如何解决这是 Vercel 错误吗?找不到模块“./model” 根api
我有 2 个文件:
- controller.js
- model.js
我正在制作一个 express.js 应用。
因此,GENERATE
内需要 model.js
,但在调用 api 时出现此错误
日志是:
问题来了,'./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,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 中不行
快速解决方法是将 ERROR Cannot find module './model'
的所有代码复制并粘贴到 model.js
中。我试过了,我部署了他,并且成功了。
如果我只是评论导入 controller.js
的那一行,我所有的应用程序也能正常工作,但显然我的应用程序将不再具有该功能,所以第一个解决方案虽然丑陋但有效,但这些都不是最好的解决方案。最好的解决方案是正确导入文件
奇怪的事实 我尝试重命名文件,但也没有用。如果我导入一个新文件,它也不起作用。
注意我把nodejs版本从12改成了14,会不会有关系?
以防万一我把我的文件夹结构根
api
这是我的./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(.*)",{
"src": "/api/products(.*)",{
"src": "/api/cart(.*)",{
"src": "/api/purchases(.*)",{
"src": "/api/sales(.*)","dest": "/api/index.js"
}
]
}
的所有代码放入 model.js
感谢阅读整个问题。
解决方法
好吧,我不知道为什么,但我认为这是一个 vercel 错误,我的问题的解决方案是不使用可选链。
在 controller.js 中,我有更多代码并且我使用了 optional chaining,只需更改逻辑即可正常工作。 Vercel 支持可选链接,但使用节点 14.x,我在 vercel 中使用节点 12.x,所以我将其更改为 14.x 并在其他文件中正常工作,但在 controller.js
因此,如果您使用 javascript 新事物,例如可选链、nullish operator 等。并且您在 vercel 中使用版本 12.x,则会产生错误。因此,您更改为节点 14.x,它也可能会给您带来错误。
所以你能做的最好的事情就是从一开始就确保你在 vercel 中有 14.x 版的 node.js
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。