【发布时间】:2018-05-15 04:58:05
【问题描述】:
我在模型文件夹中有 4 个模型(artisans、stores、items 和 itemStores),但它只将 items 模型加载到 db 变量中。为什么会这样?
server.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var db = require('./models');
var artisans = require('./app/routes/artisans.js');
var stores = require('./app/routes/stores.js');
var items = require('./app/routes/items.js');
var itemStores = require('./app/routes/itemStores.js');
var PORT = process.env.PORT || 3000;
// Set up the express app to handle data parsing
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended : true }));
app.use(bodyParser.text());
app.use(bodyParser.json({ type : "application/vmd.api-json"}));
// Static directory
app.use(express.static("app/public"));
artisans(app, db);
stores(app, db);
items(app, db);
itemsStores(app, db);
console.log(Object.keys(db));
db.sequelize.sync().then(function () {
app.listen(PORT, function () {
console.log('Listening on PORT ' + PORT);
});
});
./models/index.js
'use strict';
var fs = require('fs');
var path = require('path');
var Sequelize = require('sequelize');
var basename = path.basename(__filename);
var env = process.env.NODE_ENV || 'development';
var config = require(__dirname + '/../config/config.json')[env];
var db = {};
if (config.use_env_variable) {
var sequelize = new Sequelize(process.env[config.use_env_variable],
config);
} else {
var sequelize = new Sequelize(config.database, config.username,
config.password, config);
}
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) &&
(file.slice(-3) === '.js');
})
.forEach(file => {
var model = sequelize['import'](path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
./models/artisan.js
module.exports = function (sequelize, DataTypes) {
var artisan = sequelize.define("Item", {
name: DataTypes.STRING,
email: DataTypes.STRING,
website: DataTypes.STRING,
phoneNumber: DataTypes.INTEGER
});
return artisan;
};
./models/item.js
module.exports = function (sequelize, DataTypes) {
var item = sequelize.define("Item", {
name: DataTypes.STRING,
price: DataTypes.DECIMAL,
category: DataTypes.STRING,
artisanId: DataTypes.INTEGER
});
return item;
};
./models/itemStore.js
module.exports = function (sequelize, DataTypes) {
var itemStore = sequelize.define("Item", {
itemId: DataTypes.INTEGER,
storeId: DataTypes.INTEGER
});
return itemStore;
};
./models/store.js
module.exports = function (sequelize, DataTypes) {
var store = sequelize.define("Item", {
name: DataTypes.STRING,
addressLineOne: DataTypes.STRING,
addressLineTwo: DataTypes.STRING,
city: DataTypes.STRING,
state: DataTypes.STRING,
zip: DataTypes.INTEGER
});
return store;
};
我可以补充的另一个细节是我做了一个教程来为此提出骨架。本教程只有一个项目模型,所以这可能是一个工件。
console.log(db)的输出太大,这里提交,但是它返回一个json,它的key是['Item','sequelize','Sequelize']。
【问题讨论】:
-
显示
./models中的代码 -
发布更多代码。同时发布
console.log(db)的输出 -
sequelize.define()是database tables的定义,在您的情况下,它们都被命名为Item。
标签: node.js express sequelize.js