当我试图提供静态文件时,Node JS Express未定义。

4
我将尝试从应用程序目录中的“www”目录为应用程序提供静态内容。
我的文件夹看起来像这样:
    -www
    --node_modules
    --js
    --index.js
    --index.html
    --package.json

我希望使用js文件夹中的main.js文件,但是当我尝试使用时

    <script src="/js/main.js"></script> 

在index.html文件中,我的控制台提示我出现了GET错误和404文件未找到的问题。

我的代码大致如下:

    var app = require('express')();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);

    app.use(express.static(__dirname + '/www'));

    app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
    });

当我尝试运行服务器时,出现了以下错误:
    app.use(express.static(__dirname + '/www');
    ReferenceError: express is not defined

有人能给我一个提示,为什么会发生这种情况吗?

4个回答

11

你忘记导入express了。

你还应该将静态文件以外的非静态文件移动到“www”目录之外,因为“static files”所需的路径是“www”。

 var express = require('express');
 var path = require('path');
 var app = express();
 var http = require('http').Server(app);
 var io = require('socket.io')(http);

 var publicPath = path.resolve(__dirname, 'www');


 app.use(express.static(publicPath));
 app.get('/', function(req, res){
     res.sendFile('index.html', {root: publicPath});
 });

那真的有点帮助了,至少在尝试运行服务器时我不再遇到“express未定义”的错误了,但是,我仍然在控制台中收到404文件未找到的错误。我的main.js文件没有被识别,我不知道为什么... - bernas
仍然不起作用。尝试使用您发布的示例,但始终收到404错误。 - bernas

4
在你的代码中,你没有声明任何名为express的变量。如果没有名为express的变量,你怎么能调用它的变量/函数/键。
要使用express./anything/,你必须在代码中声明 express 变量。这可以通过以下方式完成:
var express = require('express');

0

使用Webstorm时,如果我使用以下代码:

const express = require('express');

它无法正常工作,但是如果使用以下代码:

var express = require('express');

也许这与Webstorm有关,也许这不是一个“好”的答案,但对我来说解决了这个问题。


0
如果您的答案显示“express未定义”,则在CMD或Bash终端中使用以下命令:
$ npm install express

安装成功后,使用以下命令要求express模块:
const express=require('express');

运行您的代码。请记得首先在本地主机服务器中尝试它。向您的代码添加端口监听器并进行尝试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接