Узел JS res.sendFile () не работает

1

Я получаю ReferenceError: main is not defined когда я открываю http://localhost: 3000/

Здесь я пытаюсь открыть main.html, расположенный в каталоге представлений

Это мой app.js

const express = require('express'),
  app = express(),
  config = require('./config/index'),
  routes = require('./routes/route');

app.use(express.static('${__dirname}/public'));
app.use(express.static('${__dirname}/views'));
app.use('/',routes);
app.listen(config.port,()=>{
console.log('Listing at port ${config.port}')})

Это мой route.js

const express = require('express'),
router = express.Router(),
helpers = require('../helpers/index');

router.route('/')
.get(helpers.index)

module.exports = router

Это мои помощники /index.js

var user = require('../user/user');

exports.index = (req,res)=>{
    if(user.name == ''){
        res.sendFile(main.html);
    }
    else{    
        res.sendFile(chat.html)
    }
}

module.exports = exports;   

Структура каталога

>helpers
  >index.js
>routes
  >route.js
>user
  >user.js
>views
  >main.html
  >chat.html
app.js
pacakage.json
  • 0
    edit: использовал res.render в качестве теста для рендеринга ejs все еще с этой ошибкой?
  • 1
    res.sendFile(main.html) должен выдавать синтаксическую ошибку, поскольку переменная main не существует. Подсказка: вы пытаетесь получить доступ к html свойству переменной main
Показать ещё 1 комментарий
Теги:
express

3 ответа

1
Лучший ответ

В дополнение к ответу jfriend00, вы также должны построить правильный абсолютный путь, используя глобальную переменную __dirname в узле.

Таким образом, ваш путь будет выглядеть примерно так: res.sendFile(__dirname + "/main.html") или, в зависимости от структуры вашей папки: res.sendFile(__dirname + "/someadditionalfoldrs/main.html")

или, постройте путь, используя "./", если применимо, например "./main.html";

1
var user = require('../user/user');
var path = require('path');

exports.index = (req,res)=>{
    if(user.name == ''){
        res.sendFile(path.resolve('views/main.html'));
    }
    else{    
        res.sendFile(path.resolve('views/chat.html'))
    }
}

module.exports = exports; 
1

Изменить:

res.sendFile(main.html);

чтобы:

res.sendFile("main.html");

Без кавычек он пытается интерпретировать main как объект Javascript, в котором он ищет свойство .html. Но, по-видимому, нет объекта с именем main поэтому вы получаете ReferenceError: main is not defined. Вместо этого вы хотите передать строку.

То же самое для res.sendFile("chat.html");


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

const path = require('path');
const options = {root: path.join(__dirname, "../views")};

res.sendFile("main.html", options);
  • 0
    В этом случае я получаю TypeError: path must be absolute or specify root to res.sendFile
  • 0
    @PrashantBhardwaj - Затем вам нужно построить более полный путь к расположению файлов. Я добавил пример к своему ответу, который показывает это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню