我正在帮助那些使用 Sails 框架 用 JavaScript 编写现有代码的人。对于上下文,我目前对该框架的经验为零。
为什么应用程序的模型没有被导入?
更具体地说,当我尝试运行代码时,开发人员定义的模型似乎没有被导入到任何地方。例如,当我尝试调用 API 来注册新用户时,我收到此错误:
ReferenceError: User is not defined
at Object.fn (/app/api/controllers/auth/register.js:58:23)
at wrapper (/node_modules/@sailshq/lodash/lib/index.js:3282:19)
at parley.retry [as _handleExec] (/node_modules/machine/lib/private/help-build-machine.js:1016:29)
at Deferred.exec (/node_modules/parley/lib/private/Deferred.js:286:10)
at Deferred.switch (/node_modules/machine/lib/private/help-build-machine.js:1469:16)
at Object._requestHandler [as auth/register] (/node_modules/machine-as-action/lib/machine-as-action.js:1153:27)
at /node_modules/sails/lib/router/bind.js:248:46
at routeTargetFnWrapper (/node_modules/sails/lib/router/bind.js:395:9)
at Layer.handle [as handle_request] (/node_modules/express/lib/router/layer.js:95:5)
at next (/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/node_modules/express/lib/router/layer.js:95:5)
at /node_modules/express/lib/router/index.js:281:22
at Function.process_params (/node_modules/express/lib/router/index.js:341:12)
at next (/node_modules/express/lib/router/index.js:275:10)
at next (/node_modules/express/lib/router/route.js:127:14)
这表明模型(其中包括此处引用的
User
对象,并且确实存在于 User.js
文件中)未正确导入。我对 bootstrap.js
文件也有类似的错误,该文件试图实例化 Settings
对象,但不知道那是什么。 (我“解决”了这个问题,通过注释掉引导文件中的所有逻辑来启动应用程序。)
我通过 Docker Compose 使用一个非常小的 Docker 容器来运行它。我已经检查过,当我通过 SSH 进入容器时,各种模型文件都存在,所以这不是一个明显的容器化问题。
Dockerfile
FROM node:slim
COPY package.json ./
RUN npm install
docker-compose.yml
version: "3.7"
services:
db:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: localpassword
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
networks:
default:
aliases:
- database
backend:
build:
dockerfile: Dockerfile
working_dir: /app
command: ["node", "app.js"]
ports:
- "1337:1337"
networks:
default:
aliases:
- backend
volumes:
- ./:/app
networks:
default:
volumes:
pgdata:
driver: local
事实证明,Sails 框架(或堆栈中的其他东西)给出了有点误导性的回溯。
应用程序未正确配置为连接到数据库。如果 Sails 在模型导入过程中无法连接到数据库,它似乎会默默地失败,并且无法导入模型。
将数据库正确连接到应用程序解决了此问题并加载模型。