mongodb:TableRow.TableRow不是构造函数

时间:2019-06-17 15:28:07

标签: javascript node.js mongodb express

我刚开始使用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上。但是,他们在服务器代码所在的文件中定义模型。

Similar issue but doesn't solve my problem

所以他的帖子不能解决我的问题。
知道我该如何解决吗?

1 个答案:

答案 0 :(得分:1)

更改自

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

对此:

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

还有import这样:const TableRow = require('./models/tableRow');

这是CommonJS模块规范,它是Node.js中用于处理模块(more info)的标准。

在使用Node.js(包括快速框架)时,应该这样做。

  

module.exports 请求调用的结果实际上返回的对象。(Reference

记住:

  

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


两个模块系统的简要概述:

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