节点JS res.sendFile()不起作用

时间:2017-12-06 02:17:42

标签: javascript node.js express

我收到ReferenceError: main is not defined 当我打开http://localhost:3000/

在这里,我尝试打开位于views目录中的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

3 个答案:

答案 0 :(得分:2)

变化:

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

答案 1 :(得分: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; 

答案 2 :(得分:1)

除了jfriend00的回答,您还必须使用节点中的全局 __ dirname 变量构建正确的绝对路径。

所以你的道路就像:class B { int vf; static int sf; B(int i){ vf = i; sf = i+1; } } class C extends B{ int vf; static int sf; C (int i) { super(i+20); vf = i; sf = i+2; } } class D extends C { int vf; D(int i) { super(i+40); vf = i; sf = i+4; } static void print(int a, int b) { System.out.println(a + " " + b); } static void print(int a, int b, int c) { System.out.println(a + " " + b + " " + c); } public static void main(String[] args) { C c1 = new C(100); // c1 has type C; object has class C B b1 = c1; // b1 has type B; object has class C print(C.sf, B.sf); // 102 121 print(c1.sf, b1.sf); // 102 121 print(c1.vf, b1.vf); // 100 120 System.out.println("==================="); C c2 = new C(200); B b2 = c2; print(c2.sf, b2.sf); // 202 221 print(c2.vf, b2.vf); // 200 220 print(c1.sf, b1.sf); // 202 221 print(C.sf, B.sf); //202 221 System.out.println("==================="); D d3 = new D(300); C c3 = d3; B b3 = d3; **print(D.sf, C.sf, B.sf); //304 342 361 print(d3.sf, c3.sf, b3.sf); //304 342 361** print(d3.vf, c3.vf, b3.vf); //300 340 360 } } 或者,取决于您的文件夹结构:res.sendFile(__dirname + "/main.html")

或者使用" ./"构建路径;如果适用,例如" ./ main.html";