Экспресс — не может обслуживать статические файлы при отладке

#node.js #express

#node.js #экспресс

Вопрос:

Я не могу обслуживать статические файлы в режиме отладки. Я использую аутентификацию по паспорту. Index.html это страница входа в систему с формой (POST to /login). В режиме отладки после успешной аутентификации сервер перенаправляет на / home, но я не могу ПОЛУЧИТЬ свои файлы css и javascript.

Файлы находятся в каталоге /public .

 /public
   /css
   /javascripts
   /images
   index.html
   home.html
/routes
  

в app.js:

 app.use(express.static(path.join(__dirname, 'public')));
  

в routes/index.js

 /* GET Home Page */
router.get('/home', isAuthenticated, function(req, res){
    var root = join(__dirname, '/..');
    root = join(root, '/public/');
    res.sendFile('home.html', { root: root});
});
/* Handle Login POST */
    router.post('/login', passport.authenticate('login', {
        successRedirect: '/home',
        failureRedirect: '/',
        failureFlash : true  
    }));
  

Я использую VS Code. Вот launch.json .

 {
"version": "0.2.0",
"configurations": [
    {
        "name": "Launch",
        "type": "node",
        "request": "launch",
        "program": "${workspaceRoot}/bin/www",
        "stopOnEntry": false,
        "args": [],
        "cwd": "${workspaceRoot}",
        "preLaunchTask": null,
        "runtimeExecutable": null,
        "runtimeArgs": [
            "--nolazy"
        ],
        "env": {
            "NODE_ENV": "development"
        },
        "console": "internalConsole",
        "sourceMaps": false,
        "outDir": null
    },
    {
        "name": "Attach",
        "type": "node",
        "request": "attach",
        "port": 5858,
        "address": "localhost",
        "restart": false,
        "sourceMaps": false,
        "outDir": null,
        "localRoot": "${workspaceRoot}",
        "remoteRoot": null
    },
    {
        "name": "Attach to Process",
        "type": "node",
        "request": "attach",
        "processId": "${command.PickProcess}",
        "port": 5858,
        "sourceMaps": false,
        "outDir": null
    }
]
  

}

Комментарии:

1. Как вы загружаете свои файлы .css и .js?

2. В HTML-файле с помощью <link> и <script> <script type="text/javascript" src="materialize/js/materialize.min.js"> <link type="text/css" rel="stylesheet" href="materialize/css/materialize.min.css" media="screen,projection"/>

3. Где находятся materialize.min.js и сохранить файлы materialize.min.css?

4. Комментарий выше, имея в виду, что вы установили app.use … на «общедоступный»

5. папка materialize является общедоступной. Все работает идеально, пока я не запущу приложение в режиме отладки в VS Code. В каталоге ‘/’ приложение загружает css, js-файлы и т. Д. Затем я ввожу учетные данные (пользователь, пароль), и после успешной авторизации приложение перенаправляется с «/» на «/ home». В каталоге ‘/ home’ я не могу загружать файлы css, js (но только в режиме отладки).

Ответ №1:

У меня тоже была эта проблема. Для меня это было то, что рабочий каталог был установлен неправильно. Установка его в папку, содержащую мой статический корень, сработала. В вашем случае вы можете попробовать:

 "cwd": "${workspaceRoot}/bin/www",