节点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);