javascript - 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 上。但是,他们在与服务器代码相同的文件中定义模型。
所以他的帖子并没有解决我的问题。
知道如何解决这个问题吗?
解决方案
从改变
export default mongoose.model('TableRow', TableRow);
对此:
module.exports = mongoose.model('TableRow', TableRow);
所以import
:const TableRow = require('./models/tableRow');
它是 CommonJS 模块规范,它是 Node.js 中用于处理模块的标准(更多信息)。
使用 Node.js 时,包括 express 框架,您应该这样做。
module.exports是实际作为require 调用的结果返回的对象。(参考)
记住:
您必须使用相同标准的导入和导出语法。
两个模块系统的简要总结:
今天有两个模块系统正在积极使用。CommonJS (CJS) 是 Node.js 历史上使用的。ESM(EcmaScript 模块)是一个较新的系统,已添加到 JavaScript 规范中。浏览器已经支持 ES 模块,Node 正在添加支持。(来源)
推荐阅读
- reactjs - 如何使用 React Hooks 定位特定项目以切换单击?
- java - 为什么我的 addListenerForSingleValueEvent 停止从 Android 应用程序中的 Firebase 数据库读取数据?
- r - 为什么我的遗传算法返回负适应值?
- java - JAVAFX:在运行 PauseTransition 时设置光标 CURSOR.WAIT
- xml - ASP.NET Core 2.2,XML 输入格式化程序
- python - Python - 虽然循环不适用于时间
- jenkins-x - Jenkinsx - 由于连接被拒绝错误,生产推广失败
- regex - 在 VBA 中使用通配符 (*) 和正则表达式来匹配任何内容
- javascript - 递增变量 onclick
- html - 一半显示的 div 在悬停时向上滑动