App在本地正常运行,但在Heroku上出现错误。

huangapple go评论116阅读模式
英文:

App works locally but getteting error on heroku

问题

这是您提供的代码的翻译部分:

server.js 文件:

  1. import express from 'express';
  2. import path from 'path';
  3. import dotenv from 'dotenv';
  4. import connectDB from './config/connection.js';
  5. import seedRoutes from './routes/seedRoutes.js';
  6. import productRoutes from './routes/productRoutes.js';
  7. import userRoutes from './routes/userRoutes.js';
  8. import orderRoutes from './routes/orderRoutes.js';
  9. dotenv.config();
  10. connectDB();
  11. const app = express();
  12. app.use(express.json());
  13. app.use(express.urlencoded({ extended: true }));
  14. app.get('/api/keys/paypal', (req, res) => {
  15. res.send(process.env.PAYPAL_CLIENT_ID || 'sb');
  16. });
  17. app.use('/api/seed', seedRoutes);
  18. app.use('/api/products', productRoutes);
  19. app.use('/api/users', userRoutes);
  20. app.use('/api/orders', orderRoutes);
  21. const __dirname = path.resolve();
  22. app.use(express.static(path.join(__dirname, '/frontend/build')));
  23. app.get('*', (req, res) => {
  24. res.sendFile(path.join(__dirname, '/frontend/build/index.html'));
  25. });
  26. app.use((err, req, res, next) => {
  27. res.status(500).send({ message: err.message });
  28. });
  29. const port = process.env.PORT || 5000;
  30. app.listen(port, () => {
  31. console.log(`Server listening at http://localhost:${port}`);
  32. });

productRoutes.js 文件:

  1. import express from 'express';
  2. const router = express.Router();
  3. import {
  4. getProducts,
  5. getProductBySlug,
  6. getProductById,
  7. } from '../controllers/productController.js';
  8. router.route('/').get(getProducts);
  9. router.route('/slug/:slug').get(getProductBySlug);
  10. router.route('/:id').get(getProductById);
  11. export default router;

productController.js 文件:

  1. import Product from '../models/ProductModel.js';
  2. const getProducts = async (req, res) => {
  3. const products = await Product.find({});
  4. res.send(products);
  5. };
  6. const getProductBySlug = async (req, res) => {
  7. const product = await Product.findOne({ slug: req.params.slug });
  8. if (product) {
  9. res.send(product);
  10. } else {
  11. res.status(404).send({ message: 'Product Not Found' });
  12. }
  13. };
  14. const getProductById = async (req, res) => {
  15. const product = await Product.findById(req.params.id);
  16. if (product) {
  17. res.send(product);
  18. } else {
  19. res.status(404).send({ message: 'Product not found.' });
  20. }
  21. };
  22. export { getProducts, getProductBySlug, getProductById };

请注意,这些是您提供的代码的翻译部分,不包括任何其他信息或回答您的问题。

英文:

I'm working on an amazon clone app from a turorial. It works locally and it will deploy to heroku with no errors but I get a Module Not Found for the productsController.

The file structure is

  1. ├── backend
  2. | ├── config
  3. ├── controllers
  4. ├── productController.js
  5. ├── models
  6. ├── routes
  7. ├── productRoutes.js
  8. ├── server.js

Here is the heroku error log:

  1. 2023-01-06T01:09:09.693860+00:00 app[web.1]: ^
  2. 2023-01-06T01:09:09.693860+00:00 app[web.1]:
  3. 2023-01-06T01:09:09.693861+00:00 app[web.1]: Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/backend/controllers/productController.js' imported from /app/backend/routes/productRoutes.js
  4. 2023-01-06T01:09:09.693861+00:00 app[web.1]: at new NodeError (node:internal/errors:393:5)
  5. 2023-01-06T01:09:09.693862+00:00 app[web.1]: at finalizeResolution (node:internal/modules/esm/resolve:323:11)
  6. 2023-01-06T01:09:09.693862+00:00 app[web.1]: at moduleResolve (node:internal/modules/esm/resolve:916:10)
  7. 2023-01-06T01:09:09.693862+00:00 app[web.1]: at defaultResolve (node:internal/modules/esm/resolve:1124:11)
  8. 2023-01-06T01:09:09.693863+00:00 app[web.1]: at nextResolve (node:internal/modules/esm/loader:163:28)
  9. 2023-01-06T01:09:09.693863+00:00 app[web.1]: at ESMLoader.resolve (node:internal/modules/esm/loader:841:30)
  10. 2023-01-06T01:09:09.693863+00:00 app[web.1]: at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
  11. 2023-01-06T01:09:09.693864+00:00 app[web.1]: at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:40)
  12. 2023-01-06T01:09:09.693875+00:00 app[web.1]: at link (node:internal/modules/esm/module_job:75:36) {
  13. 2023-01-06T01:09:09.693875+00:00 app[web.1]: code: 'ERR_MODULE_NOT_FOUND'
  14. 2023-01-06T01:09:09.693875+00:00 app[web.1]: }
  15. 2023-01-06T01:09:09.693880+00:00 app[web.1]:
  16. 2023-01-06T01:09:09.693880+00:00 app[web.1]: Node.js v18.12.1
  17. 2023-01-06T01:09:09.881953+00:00 heroku[web.1]: Process exited with status 1
  18. 2023-01-06T01:09:09.926097+00:00 heroku[web.1]: State changed from starting to crashed
  19. 2023-01-06T01:09:09.936162+00:00 heroku[web.1]: State changed from crashed to starting
  20. 2023-01-06T01:09:18.922072+00:00 heroku[web.1]: Starting process with command `npm start`
  21. 2023-01-06T01:09:20.986680+00:00 app[web.1]:
  22. 2023-01-06T01:09:20.986716+00:00 app[web.1]: > amazona-2@1.0.0 start
  23. 2023-01-06T01:09:20.986716+00:00 app[web.1]: > node backend/server.js
  24. 2023-01-06T01:09:20.986717+00:00 app[web.1]:
  25. 2023-01-06T01:09:21.087388+00:00 app[web.1]: node:internal/errors:484
  26. 2023-01-06T01:09:21.087389+00:00 app[web.1]: ErrorCaptureStackTrace(err);
  27. 2023-01-06T01:09:21.087390+00:00 app[web.1]: ^
  28. 2023-01-06T01:09:21.087390+00:00 app[web.1]:
  29. 2023-01-06T01:09:21.087391+00:00 app[web.1]: Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/backend/controllers/productController.js' imported from /app/backend/routes/productRoutes.js
  30. 2023-01-06T01:09:21.087391+00:00 app[web.1]: at new NodeError (node:internal/errors:393:5)
  31. 2023-01-06T01:09:21.087392+00:00 app[web.1]: at finalizeResolution (node:internal/modules/esm/resolve:323:11)
  32. 2023-01-06T01:09:21.087392+00:00 app[web.1]: at moduleResolve (node:internal/modules/esm/resolve:916:10)
  33. 2023-01-06T01:09:21.087392+00:00 app[web.1]: at defaultResolve (node:internal/modules/esm/resolve:1124:11)
  34. 2023-01-06T01:09:21.087393+00:00 app[web.1]: at nextResolve (node:internal/modules/esm/loader:163:28)
  35. 2023-01-06T01:09:21.087393+00:00 app[web.1]: at ESMLoader.resolve (node:internal/modules/esm/loader:841:30)
  36. 2023-01-06T01:09:21.087393+00:00 app[web.1]: at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
  37. 2023-01-06T01:09:21.087394+00:00 app[web.1]: at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:40)
  38. 2023-01-06T01:09:21.087395+00:00 app[web.1]: at link (node:internal/modules/esm/module_job:75:36) {
  39. 2023-01-06T01:09:21.087396+00:00 app[web.1]: code: 'ERR_MODULE_NOT_FOUND'
  40. 2023-01-06T01:09:21.087396+00:00 app[web.1]: }
  41. 2023-01-06T01:09:21.087426+00:00 app[web.1]:
  42. 2023-01-06T01:09:21.087427+00:00 app[web.1]: Node.js v18.12.1
  43. 2023-01-06T01:09:21.248317+00:00 heroku[web.1]: Process exited with status 1
  44. 2023-01-06T01:09:21.315476+00:00 heroku[web.1]: State changed from starting to crashed
  45. 2023-01-06T01:09:23.209214+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=mern-amazona2-judo2000.herokuapp.com request_id=dd865b46-6a9f-478d-87ea-bfef1a20773d fwd="136.144.43.249" dyno= connect= service= status=503 bytes= protocol=https
  46. 2023-01-06T01:09:23.521669+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=mern-amazona2-judo2000.herokuapp.com request_id=2c983834-c3e2-4a60-b39a-f55ecf4fa2fd fwd="172.98.33.99" dyno= connect= service=
  47. status=503 bytes= protocol=https
  48. 2023-01-06T01:11:30.804412+00:00 heroku[web.1]: State changed from crashed to starting
  49. 2023-01-06T01:11:39.211361+00:00 heroku[web.1]: Starting process with command `npm start`
  50. 2023-01-06T01:11:41.347517+00:00 app[web.1]:
  51. 2023-01-06T01:11:41.347544+00:00 app[web.1]: > amazona-2@1.0.0 start
  52. 2023-01-06T01:11:41.347544+00:00 app[web.1]: > node backend/server.js
  53. 2023-01-06T01:11:41.347545+00:00 app[web.1]:
  54. 2023-01-06T01:11:41.460279+00:00 app[web.1]: node:internal/errors:484
  55. 2023-01-06T01:11:41.460280+00:00 app[web.1]: ErrorCaptureStackTrace(err);
  56. 2023-01-06T01:11:41.460281+00:00 app[web.1]: ^
  57. 2023-01-06T01:11:41.460281+00:00 app[web.1]:
  58. 2023-01-06T01:11:41.460281+00:00 app[web.1]: Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/backend/controllers/productController.js' imported from /app/backend/routes/productRoutes.js
  59. 2023-01-06T01:11:41.460282+00:00 app[web.1]: at new NodeError (node:internal/errors:393:5)
  60. 2023-01-06T01:11:41.460282+00:00 app[web.1]: at finalizeResolution (node:internal/modules/esm/resolve:323:11)
  61. 2023-01-06T01:11:41.460283+00:00 app[web.1]: at moduleResolve (node:internal/modules/esm/resolve:916:10)
  62. 2023-01-06T01:11:41.460283+00:00 app[web.1]: at defaultResolve (node:internal/modules/esm/resolve:1124:11)
  63. 2023-01-06T01:11:41.460283+00:00 app[web.1]: at nextResolve (node:internal/modules/esm/loader:163:28)
  64. 2023-01-06T01:11:41.460285+00:00 app[web.1]: at ESMLoader.resolve (node:internal/modules/esm/loader:841:30)
  65. 2023-01-06T01:11:41.460285+00:00 app[web.1]: at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
  66. 2023-01-06T01:11:41.460285+00:00 app[web.1]: at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:40)
  67. 2023-01-06T01:11:41.460285+00:00 app[web.1]: at link (node:internal/modules/esm/module_job:75:36) {
  68. 2023-01-06T01:11:41.460286+00:00 app[web.1]: code: 'ERR_MODULE_NOT_FOUND'
  69. 2023-01-06T01:11:41.460286+00:00 app[web.1]: }
  70. 2023-01-06T01:11:41.460297+00:00 app[web.1]:
  71. 2023-01-06T01:11:41.460298+00:00 app[web.1]: Node.js v18.12.1
  72. 2023-01-06T01:11:41.609123+00:00 heroku[web.1]: Process exited with status 1
  73. 2023-01-06T01:11:41.742528+00:00 heroku[web.1]: State changed from starting to crashed
  74. 2023-01-06T01:11:42.461013+00:00 heroku[web.1]: State changed from crashed to starting
  75. 2023-01-06T01:11:52.618745+00:00 heroku[web.1]: Starting process with command `npm start`
  76. 2023-01-06T01:11:54.470268+00:00 app[web.1]:
  77. 2023-01-06T01:11:54.470310+00:00 app[web.1]: > amazona-2@1.0.0 start
  78. 2023-01-06T01:11:54.470311+00:00 app[web.1]: > node backend/server.js
  79. 2023-01-06T01:11:54.470311+00:00 app[web.1]:
  80. 2023-01-06T01:11:54.565973+00:00 app[web.1]: node:internal/errors:484
  81. 2023-01-06T01:11:54.565975+00:00 app[web.1]: ErrorCaptureStackTrace(err);
  82. 2023-01-06T01:11:54.565975+00:00 app[web.1]: ^
  83. 2023-01-06T01:11:54.565976+00:00 app[web.1]:
  84. 2023-01-06T01:11:54.565977+00:00 app[web.1]: Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/backend/controllers/productController.js' imported from /app/backend/routes/productRoutes.js
  85. 2023-01-06T01:11:54.565986+00:00 app[web.1]: at new NodeError (node:internal/errors:393:5)
  86. 2023-01-06T01:11:54.565986+00:00 app[web.1]: at finalizeResolution (node:internal/modules/esm/resolve:323:11)
  87. 2023-01-06T01:11:54.565986+00:00 app[web.1]: at moduleResolve (node:internal/modules/esm/resolve:916:10)
  88. 2023-01-06T01:11:54.565987+00:00 app[web.1]: at defaultResolve (node:internal/modules/esm/resolve:1124:11)
  89. 2023-01-06T01:11:54.565987+00:00 app[web.1]: at nextResolve (node:internal/modules/esm/loader:163:28)
  90. 2023-01-06T01:11:54.565987+00:00 app[web.1]: at ESMLoader.resolve (node:internal/modules/esm/loader:841:30)
  91. 2023-01-06T01:11:54.565987+00:00 app[web.1]: at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
  92. 2023-01-06T01:11:54.565993+00:00 app[web.1]: Node.js v18.12.12023-01-06T01:11:54.697714+00:00 heroku[web.1]: Process exited with status 1
  93. 2023-01-06T01:11:54.792281+00:00 heroku[web.1]: State changed from starting to crashed
  94. 2023-01-06T01:11:55.983110+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=mern-amazona2-judo2000.herokuapp.com request_id=e373b75d-6a72-432d-9709-29e6c62063bd fwd="173.239.224.8" dyno= connect= service= status=503 bytes= protocol=https
  95. 2023-01-06T01:11:56.274300+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=mern-amazona2-judo2000.herokuapp.com request_id=368733e0-a442-422d-97a1-1c3e0bc7681f fwd="173.239.224.10" dyno= connect= service= status=503 bytes= protocol=https
  96. 2023-01-06T01:11:30.571160+00:00 app[api]: Release v21 created by user judo2000@comcast.net
  97. 2023-01-06T01:11:30.571160+00:00 app[api]: Remove MONGO_URI config vars by user judo2000@comcast.net
  98. 2023-01-06T01:11:42.194061+00:00 app[api]: Set MONGODB_URI config vars by user judo2000@comcast.net
  99. 2023-01-06T01:11:42.194061+00:00 app[api]: Release v22 created by user judo2000@comcast.net

Here is the server.js

  1. import express from 'express';
  2. import path from 'path';
  3. import dotenv from 'dotenv';
  4. import connectDB from './config/connection.js';
  5. import seedRoutes from './routes/seedRoutes.js';
  6. import productRoutes from './routes/productRoutes.js';
  7. import userRoutes from './routes/userRoutes.js';
  8. import orderRoutes from './routes/orderRoutes.js';
  9. dotenv.config();
  10. connectDB();
  11. const app = express();
  12. app.use(express.json());
  13. app.use(express.urlencoded({ extended: true }));
  14. app.get('/api/keys/paypal', (req, res) => {
  15. res.send(process.env.PAYPAL_CLIENT_ID || 'sb');
  16. });
  17. app.use('/api/seed', seedRoutes);
  18. app.use('/api/products', productRoutes);
  19. app.use('/api/users', userRoutes);
  20. app.use('/api/orders', orderRoutes);
  21. const __dirname = path.resolve();
  22. app.use(express.static(path.join(__dirname, '/frontend/build')));
  23. app.get('*', (req, res) => {
  24. res.sendFile(path.join(__dirname, '/frontend/build/index.html'));
  25. });
  26. app.use((err, req, res, next) => {
  27. res.status(500).send({ message: err.message });
  28. });
  29. const port = process.env.PORT || 5000;
  30. app.listen(port, () => {
  31. console.log(`Server listening at http://localhost:${port}`);
  32. });

Here is the productRoutes.js

  1. import express, { Router } from 'express';
  2. const router = express.Router();
  3. import {
  4. getProducts,
  5. getProductBySlug,
  6. getProductById,
  7. } from '../controllers/productController.js';
  8. router.route('/').get(getProducts);
  9. router.route('/slug/:slug').get(getProductBySlug);
  10. router.route('/:id').get(getProductById);
  11. export default router;

And here is the productController

  1. import Product from '../models/ProductModel.js';
  2. const getProducts = async (req, res) => {
  3. const products = await Product.find({});
  4. res.send(products);
  5. };
  6. const getProductBySlug = async (req, res) => {
  7. const product = await Product.findOne({ slug: req.params.slug });
  8. if (product) {
  9. res.send(product);
  10. } else {
  11. res.status(404).send({ message: 'Product Not Found' });
  12. }
  13. };
  14. const getProductById = async (req, res) => {
  15. const product = await Product.findById(req.params.id);
  16. if (product) {
  17. res.send(product);
  18. } else {
  19. res.status(404).send({ message: 'Product not found.' });
  20. }
  21. };
  22. export { getProducts, getProductBySlug, getProductById };

答案1

得分: 0

更正路径不匹配。将controllers更改为controller,或者反之(取决于实际情况)。

  • 错误信息为:
    无法找到模块'/app/backend/controllers/productController.js'

  • 而你的路径是:
    /app/backend/controller/productController.js

英文:

You have a path mis-match. Change controllers to controller or vise-versa (whichever is true).

  • The error is:
    Cannot find module '/app/backend/controllers/productController.js'

  • and your path is:
    /app/backend/controller/productController.js

huangapple
  • 本文由 发表于 2023年1月6日 09:22:16
  • 转载请务必保留本文链接:https://go.coder-hub.com/75026040.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定