连接到现有数据库 - node.js

时间:2018-05-24 16:01:36

标签: mysql node.js database api

我想在Node.JS中开发一个API,只有一个端点有2个参数:一个数字和一个日期时间。 此端点将在json中的MySql数据库中返回请求的结果。

但我的问题是:我不知道我是否需要在代码中定义模型。实际上,我的数据库已经创建,我已连接到它,我只需要返回一个带有2个参数的SQL请求的结果。

据我所知,我认为只需调用数据库并直接返回结果即可找到解决方案。

有可能吗?

提前谢谢!!

1 个答案:

答案 0 :(得分:1)

不确定我是否正确理解了这个问题,但从它的外观来看,也许你必然会遇到某种形式的ORM。在任何情况下,大多数ORM或底层数据库驱动程序都允许您将原始SQL查询发送到MySQL服务器,而无需任何类型的模型或模式。

例如,使用npm中的 mysql 包(样本来自官方repo):

const Sequelize = require('sequelize');
const sequelize = new Sequelize('user', 'pwd', 'localhost', {
    dialect: 'sqlite',
    operatorsAliases: false,
    pool: {
        max: 5,
        min: 0,
        acquire: 30000,
        idle: 10000
    },
    storage: 'users-review.sqlite'
});

const User = sequelize.define('user', {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    name: {
        type: Sequelize.STRING,
        allowNull: false,
        unique: true
    },
    password: {
        type: Sequelize.STRING,
        allowNull: false
    }
});

const Review = sequelize.define('review', {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    text: {
        type: Sequelize.TEXT,
        allowNull: false
    }
});

User.hasMany(Review, {
    foreignKey: 'revieweeId',
    allowNull: false
});

Review.belongsTo(User, {
    as: 'reviewer'
});

Review.belongsTo(User, {
    as: 'reviewee'
});

sequelize.sync({
    force: true
}).then(() =>
    // create some users
    User.bulkCreate([
        { name: 'user1', password: 'pwd1' },
        { name: 'user2', password: 'pwd2' }
    ])
    .then(() => {
        return User.findAll();
    })
    // and set the associations
    .then(users => {
        let [ user1, user2 ] = users;
        return Review.create({
            text: 'about user2'
        })
        .then(review => {
            return review.setReviewer(user1).then(review => {
                return review.setReviewee(user2).then(review => {
                    return user1.addReview(review).then(() => {
                        return review;
                    });
                })
            })
        })
    })
    .then(review => {
        review.getReviewer().then(u => console.log(
            'reviewer', u.toJSON()));
        review.getReviewee().then(u => console.log(
            'reviewee', u.toJSON()));
    })
    .then(() => {
        return User.findById(1, {
            include: [ Review ]
        });
    })
    .then(user => {
        console.log('user', user.toJSON());
        user.getReviews().then(reviews =>
            reviews.forEach(r =>
                console.log("review", r.toJSON())));
    }));