目录
前言
node.js框架试水!思想类似Spring boot的controller-service-repository,之前做java开发用的Spring Boot+Spring Data JPA,因此想要用类似的moduel来尝试node.js后端搭建。新人第一次写文章写心得,同时也是第一次写node.js项目,如果有什么意见或者错误希望各位能够多多提出🙇
一、初始化项目+引入额外的依赖
1)初始化fastify框架
我们选择好项目目录地点后,在目录地点使用cmd,使用以下指令:
项目目录地址>npm init fastify
这里举个例子,我希望新项目在D:\test下,因此就是:D:\test> npm init fastify
输入指令后,项目文件下就会新增相应的文件,
生成好项目文件后,使用npm install,为项目引入相应的模组包。
至此,一个最最基础的fastify项目就生成成功了,此时直接npm run dev,即可体验到最预设的功能了。
(此为项目根请求,默认返回为{"root":true})
2) 梳理现有内容
好,关闭cmd窗口来停止下项目,回头看一下,我们在init fastify的时候生成了什么文件
node_moduels、2个package.json和gitignore就不多说了,讲讲其他几个:
- app.js:启动项js,npm run时会读取app.js的数据再运行整个fastify项目
- plugins包:放置插件的包,app.js中指明扫描此包并注册插件
- routes包:放置各种路由地址的包,相当于接口包
- test包:测试拥抱,可以对各种插件和接口进行测试(本章暂时不讲)
好,fastify配置好了,是时候对sequelize动手了。
二、引入sequelize,连接并操作数据库
1)配置链接
还是来到项目根目录,我们引入2个包:
>npm install sequelize
>npm install sequelize-fastify
- sequelize: sequelize模组包
- sequelize-fastify:一个插件包,用于帮助注册配置sequalize连接至fastify中
思路:根据sequelize的文档,每个Model都要配置一个数据库连接信息(sequelize),因此将sequelize的连接信息提取出来作为全局变量是个可行且较为方便的方案。
//params.json,在App.js同一目录下
{
"database":{
"selectedDatabase":"sequelize-test",
"type":"mysql",
"host":"localhost",
"port":"3306",
"username":"root",
"password":"workspace"
}
}
来到app.js,
//**一般情况下配置文件应该为.env,但我这里懒,单纯把配置放在了params.json文件里
//**然后使用fs和JSON解析获取本地配置参数
const jsonFs = fs.readFileSync("params.json");
const params = JSON.parse(jsonFs);
//在moduel.exports里添加新的代码
module.exports = async function (fastify, options) {
//fastify也有内置log,这里通过fastify.log引出并使用
const log = fastify.log;
// Place here your custom code!
//第一步,链接数据库(配置sequelize链接),将连接信息配置至fastify中作为全局变量
fastify
.register(require("sequelize-fastify"), {
//必填*:连接信息在全局变量中的名称
instance: "sequelize",
sequelizeOptions: {
//要链接的数据库名称
database: params.database.selectedDatabase,
//必填*:要链接的数据库的类型
dialect: params.database.type,
//要登陆的数据库用户名
username: params.database.username,
//密码
password: params.database.password,
//sequelize原先直接console.log()的,换成fastify封装的log用
logging: (sql) => {
log.info(sql);
},
//其他选项
options: {
// host
host: params.database.host,
//端口
port: params.database.port,
},
},
})
//fastify插件配置并注册成功后可以接着使用.ready()方法作为回调函数
.ready(async () => {
//这里我们使用.ready()来看一下数据库连接情况如何,并验证链接是否成功
//注意这里已经可以通过fastify.sequelize直接获得到数据库连接信息了
fastify.sequelize
.authenticate()
.then(() => {
log.info("Connection has been established successfully.");
})
.catch((err) => {
log.error("Unable to connect to the database:", err);
});
});
//其他代码暂时不动
};
<