【发布时间】:2020-04-25 20:49:49
【问题描述】:
我正在向我的节点项目添加续集,它将以下 index.js 文件添加为设置的一部分,但是当我运行项目时,__dirname 解析为我的 C: 目录而不是项目根文件夹 C:\工作区\我的应用程序。如何配置它以使其解析为我的项目根目录?
index.js 文件
'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config.json')[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
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 => {
const 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;
package.json
{
"name": "my-app-model",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"format": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"",
"start": "next start",
"type-check": "tsc"
},
"dependencies": {
"@material-ui/core": "^4.8.3",
"@material-ui/lab": "4.0.0-alpha.39",
"mysql": "^2.18.1",
"mysql2": "^2.1.0",
"next": "9.1.7",
"prettier": "^1.19.1",
"react": "16.12.0",
"react-dom": "16.12.0",
"sequelize": "^5.21.7",
"sequelize-cli": "^5.5.1"
},
"devDependencies": {
"@types/node": "^13.1.6",
"@types/react": "^16.9.17",
"@types/react-dom": "^16.9.4",
"typescript": "^3.7.4"
}
}
【问题讨论】:
-
取决于你如何运行项目。
-
@Anatoly - 谢谢。那我应该怎么运行呢?
-
__dirname 是您作为入口点运行的脚本的路径。检查你如何运行它以及从哪里运行它
-
好的。从 package.json 显示你的“运行”命令
-
也许 'next' 正在以 c:\ 作为工作目录运行?
标签: node.js sequelize.js