首页 > 解决方案 > mongodb:TableRow.TableRow 不是构造函数

问题描述

我正在开始使用 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 进行测试时:

在此处输入图像描述

我收到此错误:

TypeError:TableRow 不是构造函数

我认为问题在于我在 server.js 中需要模型的方式:

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

其他人遇到了类似的问题并将其发布在 stackOverFlow 上。但是,他们在与服务器代码相同的文件中定义模型。

类似的问题,但不能解决我的问题

所以他的帖子并没有解决我的问题。
知道如何解决这个问题吗?

标签: javascriptnode.jsmongodbexpress

解决方案


从改变

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

对此:

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

所以importconst TableRow = require('./models/tableRow');

它是 CommonJS 模块规范,它是 Node.js 中用于处理模块的标准(更多信息)。

使用 Node.js 时,包括 express 框架,您应该这样做。

module.exports是实际作为require 调用的结果返回的对象。(参考

记住:

您必须使用相同标准的导入和导出语法。


两个模块系统的简要总结:

今天有两个模块系统正在积极使用。CommonJS (CJS) 是 Node.js 历史上使用的。ESM(EcmaScript 模块)是一个较新的系统,已添加到 JavaScript 规范中。浏览器已经支持 ES 模块,Node 正在添加支持。来源


推荐阅读