0

在尝试将代码分成路由、控制器等之前,我一直做得很好。现在,当我尝试加载 html 文件时出现错误。当我转到链接http://localhost:3000/我收到此错误错误:ENOENT:没有这样的文件或目录,stat '/views/index.html'

这是我的 routes.js 代码

module.exports = function (app) {
    var userController = require('../controllers/userController');

    // app.use(require('express').static('../app/views/index.html'));

    app.get('/', userController.renderHomePage);

    app.post('/find', userController.getUser);
    app.get('/get', userController.getUsers);
    app.post('/add', userController.addUser);
}

这是我的 userController.js 文件

var mongoose = require('mongoose');
var User = require('../models/user');

var express = require('express');

var app = express();
app.use(express.static('../app'));

exports.renderHomePage = function (req, res) {
    res.sendFile('/views/index.html');
}

exports.addUser = function(req,res){
    console.log(req.body);

    var newUser = new User({
        name : req.body.name,
        username : req.body.username,
        password : req.body.password
    });

    newUser.save(function(err){
        if(err){
            console.log(err);
        }
        else{
            console.log("User Saved successfully");
        }
    });

    res.send(req.body);
};

exports.getUsers = function (req, res) {
    // body...
    User.find({}, function(error, users){
        if(error){
            console.log(error);
        }
        else{
            res.send(users);
        }
    })
};

exports.getUser = function (req, res) {
    // body...
    console.log(req.body);
    var data = req.body.username;

    User.find({username : data}, function(err, user){
        if(err){
            throw err
        }
        else{
            console.log(user);
            res.send(user);
        }
    } );
};

这是我的 server.js

var express = require('express');
// var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var PORT = process.env.PORT || 3000;

var app = express();

var routes = require('./api/routes/routes');
routes(app);

var database = require('./config/database');

app.use(bodyParser.json());

app.listen(PORT, function(){
    console.log("Server is running on port "+PORT);
})

这是我的文件夹结构。 这是文件夹结构

服务器启动没有错误。而且我认为我已经正确地给出了路径。但我得到了错误。谁能帮我这个 ?谢谢。

编辑: 这就是我将脚本链接到 html 文件的方式

<script src="/script/app.js"></script>
4

5 回答 5

1

以 开头的路径/绝对路径,这意味着它根据根目录解析(在 Windows 上,类似于C:\,在 linux 上只是/)。

您应该使用path模块来获取相对于模块目录的文件的路径,如下所示:

var path = require('path');
var filePath = path.join(__dirname, 'relative/path/to/file');

__dirname是一个特殊的模块范围变量,它提供了当前模块所在目录的路径。

于 2017-09-29T01:56:15.930 回答
1
app.use(express.static('../../app'))

尝试在您的 userController.js 文件中添加另一个“..”,只有一个 .. 会将您放在 api 目录中。

于 2017-09-29T01:56:34.040 回答
1

包括“路径”模块并更改

res.sendFile('/views/index.html');

res.sendFile(path.resolve(`${__dirname}/views/index.html`))
于 2017-09-29T02:04:59.103 回答
1

我遇到了这个问题。您正在使用 res.send 发送 html 文件,但您的脚本不在静态可用文件可以访问的目录中。刚刚看到你的编辑。使用您的 EDIT,您正在接近它。更改脚本包含的 HTML 文件中的引用。

于 2017-09-29T04:21:12.247 回答
1

两个月了,问题解决了吗?

如果没有,您是否尝试过该代码:

app.use(express.static('app'));

您提供给静态函数的路径是相对于您运行节点进程的目录的。

在您的情况下,您使用/从server.js文件(位于根目录)启动服务器,因此您提供给静态函数的路径是相对于该位置的。

于 2017-12-22T21:21:30.097 回答