जब मैं npm run prod चलाता हूं, तो मुझे त्रुटि मिलती है:

enter image description here

मेरी package.json स्क्रिप्ट इस प्रकार है:

    "scripts": {
    "build": "npm run clean && babel src/index.js --out-dir dist --copy-files",
    "clean": "rm -rf dist",
    "test": "jest --coverage --watch",
    "start": "babel-node — exec src/index.js",
    "dev": "nodemon  — exec babel-node src/index.js",
    "prod": "node dist/index.js"

मेरी निर्देशिका संरचना:

dist/
 index.js // the compiled file
node_modules
src/
  /config
  /controllers
  /dao
  /middlewares
  /routes
  /services
 index.js
 server.js

Server.js मेरा एक्सप्रेस ऐप है और इसे Index.js में निर्यात किया जाता है जहां मैं Mongodb से जुड़ता हूं। लाइन 9, जैसा कि संकलित Index.js से त्रुटि स्टैक में कहा गया है, है:

var app = require('./server'); // not being found

मुझे यकीन नहीं है कि निर्भरता क्यों नहीं मिली है। नीचे index.js है:

require('dotenv').config()
const app = require('./server')
const chalk = require('chalk')
const OrdersDAO = require('./dao/ordersDAO')
// module to connect to MongoClient
const { MongoClient } = require('mongodb')
const uri = process.env.MONGODB_CONN_STR

const client = new MongoClient(uri, {
  useNewUrlParser: true,
  poolSize: 50,
  useUnifiedTopology: true,
})

const connectToMongoDB = async () => {
  try {
    const conn = await client.connect()
    const orders = conn
      .db(process.env.DATABASE)
      .collection(process.env.COLLECTION)
    await OrdersDAO.injectDB(client)
    await listDatabases(client)
    app.listen(process.env.PORT, () => {
      console.log(`listening on port ${process.env.PORT}`)
    })
  } catch (e) {
    console.error(`Index.js ~~~ Unable to get database.collection: ${e}`)
    // Exit Gracefully ~~~ https://nodejs.dev/learn/how-to-exit-from-a-nodejs-program
    process.on('SIGTERM', () => {
      server.close(() => {
        console.log('Process terminated')
      })
    })
  } finally {
    //  when uncommented ~~~ OrdersDAO.addOrder() ~~~ Unable to post order:) MongoError: Topology is closed, please connect
    // console.log(chalk.magentaBright('Mongo Connection is closing ~~~~'))
    // await client.close()
  }
}

const listDatabases = async (client) => {
  try {
    const dbList = await client.db().admin().listDatabases()
    console.log(chalk.magentaBright('Databases:'))
    dbList.databases.forEach((db) => {
      console.log(chalk.greenBright(` - ${db.name}`))
    })
  } catch (error) {
    console.error(error)
  }
}

connectToMongoDB()

सर्वर.जेएस

onst express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
require('dotenv').config()
const orders = require('./routes/orders')

const app = express()

// http://expressjs.com/en/4x/api.html#express.urlencoded
app.use(cors())
app.use(express.urlencoded({ extended: true }))

/* stackoverflow.com/questions/24330014/bodyparser-is-deprecated-express-4
parse the incoming requests with JSON payloads */
app.use(express.json())

// Register api routes
app.use('/', orders) //(req, res) => res.send(console.log('Time:', Date.now())))
app.use('/admin/', orders)
app.use('/admin/:id', orders)
/*
TODO - fall through route handler
*/
// app.use("*", (req, res) => res.status(404).json({ error: "not found" }));

module.exports = app
0
Kevin T. 4 अगस्त 2021, 18:09

2 जवाब

सबसे बढ़िया उत्तर

समाधान बिल्ड स्क्रिप्ट को संशोधित करना था:

"build": "npm run clean && babel ./src --out-dir dist --copy-files",

उसके बाद, package.json में मेरी निर्भरता के आधार पर, मेरे पास एक पुनर्योजी रनटाइम त्रुटि थी:


/Users/kevinturney/Vue/cookie_mvp_next/cookie_server/dist/dao/ordersDAO.js:30 var injectDB = _asyncToGenerator( /*#__PURE_*/regeneratorRuntime.mark(function _callee(clientConnection) { ^ – 

फिर मैंने npm ने रीजेनरेटर-रनटाइम और कोर-जेएस स्थापित किया, देखें Dev.to लेख। अंत में वहाँ से, मैंने उन्हें index.js में आयात किया।

एक अंतिम नोट, index.js पर एक परीक्षण चलाते समय, मेरे पास पुनर्योजी-रनटाइम परिभाषित नहीं था, इसलिए /परीक्षणों/indes.spec.js में, मैंने इसे आयात किया:

import 'regenerator-runtime/runtime'

सब कुछ काम करता है।

0
Kevin T. 5 अगस्त 2021, 14:37

ऐसा लगता है कि आपको संपूर्ण src फ़ोल्डर बनाना है, न केवल index.js ऐसा करें और फिर आप dist फ़ोल्डर के अंदर index.js और server.js दोनों फाइलें देखेंगे।

इसे प्राप्त करने के लिए, अपने बिल्ड कमांड को package.json में बदलें:

npm run clean && babel src --out-dir dist --copy-files
1
Spots Solutions 4 अगस्त 2021, 17:37