节点JS res.sendFile()不起作用
我得到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
这是我的helpers / 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的回答之外,还必须使用节点中的全局__dirnamevariables来构build正确的绝对path。
所以你的path就像res.sendFile(__dirname + "/main.html")
或者根据你的文件夹结构: res.sendFile(__dirname + "/someadditionalfoldrs/main.html")
或者,如果适用,使用“./”构buildpath,如“./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
。 你想在这里传递一个string。
res.sendFile("chat.html");
如果文件不在本模块的目录中,则需要构build一个更完整的path来指定其位置。 鉴于你展示的文件层次结构,我认为这可能是这样的:
const path = require('path'); const options = {root: path.join(__dirname, "../views")}; res.sendFile("main.html", options);