mongodb: TableRow.TableRow не является конструктором - PullRequest
1 голос
/ 17 июня 2019

Я начинаю с mongodb.
Я настроил все настройки mongodb и mongoose, и они отлично работают.
Вот файлы проекта:

server.js:

const TableRow = require('./models/tableRow');
const bodyParser = require('body-parser');
const cors = require('cors')
const express = require('express');
const mongoose= require('mongoose')
const app = express();
const router = express.Router();
app.use(cors());
app.use(bodyParser.json());
mongoose.connect('mongodb://localhost/table', function(err) {
  if (err) { throw err; }
  console.log('Successfully connected');
});
const connection = mongoose.connection;
connection.on('error', console.error.bind(console, 'connection error:'));
connection.once('open', () => {
    console.log('MongoDB database connection established successfully!');
});
app.use('/', router);
router.route('/table/add').post((req, res) => {
  let tableRow = new TableRow (req.body);
  tableRow.save()
      .then(issue => {
          res.status(200).json({'tableRow': 'Added successfully'});
      })
      .catch(err => {
          res.status(400).send('Failed to create new record');
      });
});
app.listen(5757, () => console.log(`Express server running on port 5757`)); 

tableRow.js

const mongoose = require('mongoose')
const Schema = mongoose.Schema;
let TableRow = new Schema({
    column1Data: {
        type: String
    },
    column2Data: {
        type: String
    }
});
export default mongoose.model('TableRow', TableRow);

Когда я попытался проверить это с POSTMAN:

enter image description here

Я получаю эту ошибку:

TypeError: TableRow не является конструктором

Я думаю, что проблема в том, как мне потребовалась модель в server.js:

const TableRow = require('./models/tableRow');

Кто-то еще сталкивался с подобной проблемой и разместил ее в stackOverFlow. Однако они определяют модель в одном файле с кодом сервера.

Аналогичная проблема, но не решает мою проблему

Так что его сообщение не решает мою проблему.
Любая идея, как я могу это исправить?

1 Ответ

1 голос
/ 17 июня 2019

Изменение с

export default mongoose.model('TableRow', TableRow);

К этому:

module.exports = mongoose.model('TableRow', TableRow);

А import так: const TableRow = require('./models/tableRow');

Это спецификация модуля CommonJS, которая является стандартом, используемым в Node.js для работы с модулями ( больше информации ).

При использовании Node.js, включая Express Framework, вы должны это сделать.

module.exports - это объект, который фактически возвращается в результате запроса вызова . ( Ссылка )

Помните:

Вы должны использовать синтаксис импорта и экспорта из того же стандарта.


Краткое описание двух модульных систем:

Сегодня активно используются две модульные системы. CommonJS (CJS) - это то, что Node.js использовало исторически. ESM (модули EcmaScript) - это более новая система, которая была добавлена ​​в спецификацию JavaScript. Браузеры уже поддерживают модули ES, а Node добавляет поддержку. ( source )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...