【发布时间】:2018-08-21 21:29:10
【问题描述】:
我不确定实例是否未正确创建,但我的模型似乎未定义。这是我的代码的设置方式:
db.js
const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
const basename = path.basename(module.filename);
const env = process.env.NODE_ENV || "development";
const config = require(__dirname + "/config.js")[env];
const db = {};
if (config.use_env_variable) {
var sequelize = new Sequelize(process.env[config.use_env_variable]);
} else {
var sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
);
}
fs.readdirSync(path.join(__dirname, "models"))
.filter(function(file) {
return (
file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js"
);
})
.forEach(function(file) {
let model = sequelize["import"](path.join(__dirname, "models", file));
db[model.name] = model;
});
Object.keys(db).forEach(function(modelName) {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
sequelize
.authenticate()
.then(() => {
console.log(`Connection was successful!`);
})
.catch(err => {
console.log(`Unable to connect to database: ${err}`);
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = {
db
};
Manifest.js(在模型文件夹中)
"use strict";
module.exports = function(sequelize, DataTypes) {
let Manifest = sequelize.define("Manifest", {
manifestNumber: {
type: DataTypes.STRING(10),
primaryKey: true,
allowNull: false
},
huller: DataTypes.STRING(50),
address: DataTypes.STRING(50),
carrier: DataTypes.STRING(50),
driver: DataTypes.STRING(50),
dateShipped: DataTypes.DATE,
preparedBy: DataTypes.STRING(15),
recievedBy: DataTypes.STRING(15),
truckLicenseNumber: DataTypes.STRING(25),
frontTrailerLicenseNumber: DataTypes.STRING(25),
rearTrailerLicenseNUmber: DataTypes.STRING(25),
splitLoad: DataTypes.BOOLEAN,
tagNumber: DataTypes.STRING(50),
grossTotal: DataTypes.DECIMAL(18, 0),
netTotal: DataTypes.DECIMAL(18, 0),
totalBins: DataTypes.DECIMAL(18, 0),
phase: DataTypes.STRING(10),
shipments: DataTypes.INTEGER,
submitDate: {
type: DataTypes.DATEONLY,
defaultValue: DataTypes.NOW,
allowNull: false
}
});
return Manifest;
};
api.js (sn-p)
const db = require("../db");
const express = require("express");
const router = express.Router();
router.post("/manifests/new", function(req, res) {
let manifest = req.body;
db.Manifest.max("manifestNumber")
.success(max => {
if (max) {
// Convert max to int, add 1, then post with new manifest
} else {
// Empty table so start with 1
}
})
.error(err => {
console.log(`Error querying max: ${err}`);
});
})
我确保文件名与模型中定义的完全匹配,但我不确定当我的 db.js 读取模型目录并将其添加到 db 变量时这是否重要。可能是我的代码的结构方式,或者当我将它包含在我的 api.js 中时我误用了 db?我知道此代码正确连接到我的 SQL Server 实例,但可能是此模型未正确链接到现有表吗?或者此时桌子恰好是空的?这个 Sequelize noob 非常感谢任何和所有的帮助!
【问题讨论】:
-
实际上,问题只是我在一个对象中导出了 db 而不仅仅是它本身。将其更改为仅 module.exports = db 修复了它。傻我。
标签: javascript node.js express sequelize.js