首页 > 解决方案 > res.sendFile 命令nodejs中的错误

问题描述

[

var express = require("express");
var app = express();
var port = 3000;
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

var mongoose = require("mongoose");
mongoose.Promise = global.Promise;
mongoose.connect("mongodb://localhost:27017/node-demo");
var nameSchema = new mongoose.Schema({
    firstName: String,
    lastName: String
});
var User = mongoose.model("User", nameSchema);

app.get("/", (req, res) => {
    res.sendFile(__dirname + "/index.html");
});

app.post("/addname", (req, res) => {
    var myData = new User(req.body);
    myData.save()
        .then(item => {
            res.send("Name saved to database");
        })
        .catch(err => {
            res.status(400).send("Unable to save to database");
        });
});

app.listen(port, () => {
    console.log("Server listening on port " + port);
});
<!DOCTYPE html>
<html>
    <head>
        <title>Intro to Node and MongoDB</title>
    </head>

    <body>
        <h1>Into to Node and MongoDB</h1>
        <form method="post" action="/addname">
            <label>Enter Your Name</label><br>
            <input type="text" name="firstName" placeholder="Enter first name..." required>
            <input type="text" name="lastName" placeholder="Enter last name..." required>
            <input type="submit" value="Add Name">
        </form>
    </body>
</html>

]

通过在 localhost:3000 上运行代码, 我在我的 Bowser 上得到了这个结果

TypeError: res.sendFile 不是 app.get (C:\Users\DELL pc\Documents\node\app.js:18:9) 处的函数 (C:\Users\DELL pc\Documents\node\node_modules) \express\lib\router\index.js:164:37) 在参数 (C:\Users\DELL pc\Documents\node\node_modules\express\lib\router\index.js:138:11) 在传递 (C :\Users\DELL pc\Documents\node\node_modules\express\lib\router\index.js:145:5) 在 Router._dispatch (C:\Users\DELL pc\Documents\node\node_modules\express\lib\ router\index.js:173:5) 在 Object.router [作为句柄] (C:\Users\DeLL pc\Documents\node\node_modules\express\lib\router\index.js:33:10) 在下一个 ( C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15) 在 Object.urlencodedParser [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\body -parser\lib\types\urlencoded.js:91:7) 在下一个 (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15) 在 Object.jsonParser [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\body-parser \lib\types\json.js:110:7) 在下一个 (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15) 在 Object.expressInit [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\express\lib\middleware.js:30:5) 在下一个 (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto. js:174:15) 在 Object.query [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\middleware\query.js:43:5) 在下一个 (C:\Users \DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15) 在 Function.app.handle (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js :182:3)jsonParser [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\body-parser\lib\types\json.js:110:7) 在下一个 (C:\Users\DELL pc\Documents\node \node_modules\connect\lib\proto.js:174:15) 在 Object.expressInit [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\express\lib\middleware.js:30:5)在下一个 (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15) 在 Object.query [作为句柄] (C:\Users\DELL pc\Documents\node\ node_modules\connect\lib\middleware\query.js:43:5) 在 Function.app 的下一个 (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15)。句柄(C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:182:3)jsonParser [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\body-parser\lib\types\json.js:110:7) 在下一个 (C:\Users\DELL pc\Documents\node \node_modules\connect\lib\proto.js:174:15) 在 Object.expressInit [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\express\lib\middleware.js:30:5)在下一个 (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15) 在 Object.query [作为句柄] (C:\Users\DELL pc\Documents\node\ node_modules\connect\lib\middleware\query.js:43:5) 在 Function.app 的下一个 (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15)。句柄(C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:182:3)15) 在 Object.expressInit [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\express\lib\middleware.js:30:5) 在下一个 (C:\Users\DELL pc\Documents\ node\node_modules\connect\lib\proto.js:174:15) 在 Object.query [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\middleware\query.js:43 :5) 在下一个 (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15) 在 Function.app.handle (C:\Users\DELL pc\Documents\node \node_modules\connect\lib\proto.js:182:3)15) 在 Object.expressInit [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\express\lib\middleware.js:30:5) 在下一个 (C:\Users\DELL pc\Documents\ node\node_modules\connect\lib\proto.js:174:15) 在 Object.query [作为句柄] (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\middleware\query.js:43 :5) 在下一个 (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15) 在 Function.app.handle (C:\Users\DELL pc\Documents\node \node_modules\connect\lib\proto.js:182:3)\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15) 在 Function.app.handle (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto .js:182:3)\Users\DELL pc\Documents\node\node_modules\connect\lib\proto.js:174:15) 在 Function.app.handle (C:\Users\DELL pc\Documents\node\node_modules\connect\lib\proto .js:182:3)

标签: node.jsmongodbexpressbody-parser

解决方案


res我知道存在但不是函数的唯一原因res.sendFile()是,如果您在将sendFile方法添加到 Express 之前运行的是旧版本的 Express。

文档

从 Express v4.8.0 开始支持 res.sendFile()。


您还可以添加一些日志记录以获取更多信息:

app.get("/", (req, res) => {
    console.log(typeof res.sendFile);
    console.log(res);
    res.sendFile(__dirname + "/index.html");
});

在您的控制台中,您可以使用以下命令行查看已安装的 Express 版本:

npm view express version

推荐阅读