Я получаю 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
В дополнение к ответу jfriend00, вы также должны построить правильный абсолютный путь, используя глобальную переменную __dirname в узле.
Таким образом, ваш путь будет выглядеть примерно так: res.sendFile(__dirname + "/main.html")
или, в зависимости от структуры вашей папки: res.sendFile(__dirname + "/someadditionalfoldrs/main.html")
или, постройте путь, используя "./", если применимо, например "./main.html";
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;
Изменить:
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);
TypeError: path must be absolute or specify root to res.sendFile
res.sendFile(main.html)
должен выдавать синтаксическую ошибку, поскольку переменнаяmain
не существует. Подсказка: вы пытаетесь получить доступ кhtml
свойству переменнойmain