1) Создать папку database/definitions
2) Поместите эту index.js
в папку models
в database
папку
3) Поместите определения модели (схемы) в папку database/definitions
.
4) Создайте database/definitions/index.js
и определите такое тело:
'use strict';
module.exports.Artisan = require('./Artisan');
module.exports.Store = require('./Store');
module.exports.Item = require('./Item');
module.exports.ItemStore = require('./ItemStore');
- убедитесь, что файлы определений имеют верхний регистр - для соглашения
5) Определения модели:
базы данных / определения / Artisan.js
'use strict';
const DataTypes = require('sequelize');
module.exports = {
name: DataTypes.STRING,
email: DataTypes.STRING,
website: DataTypes.STRING,
phoneNumber: DataTypes.INTEGER
};
База данных / определения / Store.js
'use strict';
const DataTypes = require('sequelize');
module.exports = {
name: DataTypes.STRING,
addressLineOne: DataTypes.STRING,
addressLineTwo: DataTypes.STRING,
city: DataTypes.STRING,
state: DataTypes.STRING,
zip: DataTypes.INTEGER
};
База данных / определения / Item.js
'use strict';
const DataTypes = require('sequelize');
module.exports = {
name: DataTypes.STRING,
price: DataTypes.DECIMAL,
category: DataTypes.STRING,
artisanId: DataTypes.INTEGER
};
база данных / определения / ItemStore.js
'use strict';
const DataTypes = require('sequelize');
module.exports = {
itemId: DataTypes.INTEGER,
storeId: DataTypes.INTEGER
};
6) Полный код database/index.js
:
'use strict';
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const connection = config.use_env_variable ?
new Sequelize(process.env[config.use_env_variable], config) :
new Sequelize(config.database, config.username, config.password, config);
const definitions = require('./definitions');
const models = {};
for(const name in definitions) {
models[name] = connection.define(name, definitions[name]);
}
module.exports = {
connection, models
};
7) Полный код server.js
:
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const db = require('./database');
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"}));
app.use(express.static("app/public"));
// how to use models:
app.get('/artisans/:id', async (req, res) => {
try {
const Artisan = db.models.Artisan;
const artisan = await Artisan.findOne({id: req.params.id});
res.status(200).send(artisan);
}
catch (error) {
res.status(500).send(error);
}
});
db.connection.sync().then(() => {
app.listen(PORT, () => console.log('Listening on PORT:', PORT));
});
когда вам нужно будет добавить новое определение:
1) просто добавьте его к database/definitions/User.js
как примеры из другого определения
2) и определите его в database/definitions/index.js
, добавив строку:
module.exports.User = require('./User');
все будет обработано автоматически.
3) и в вашем примере маршрут:
app.get('/users/:id', async (req, res) => {
try {
const User = db.models.User;
const user = await User.findOne({id: req.params.id});
res.status(200).send(user);
}
catch (error) {
res.status(500).send(error);
}
});