首页 > 解决方案 > 如何修复中间件功能错误app.use

问题描述

我已经安装了 Express、Nodeman、Express-Edge。我使用的是 Windows 10。有人告诉我有类似问题,他需要安装他指定的库。就像我说的我已经安装了它。

index.js代码中;

 const path = require('path');
const expressEdge = require('express-edge');
const express = require('express');

const app = new express();

app.use(express.static('public'));
app.use(expressEdge);
app.set('views', __dirname + '/views');

app.get('/', (req, res) => {
    res.render('index');
});

app.get('/about', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'pages/about.html'));
});

app.get('/contact', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'pages/contact.html'));
});

app.get('/post', (req, res) => {
    res.sendFile(path.resolve(__dirname, 'pages/post.html'));
});

app.listen(4000, () => {
    console.log('App listening on port 4000')
});

命令外壳说:

C:\Users\Maximus\WebstormProjects\untitled4\nodejs-blog-tutorial\node_modules\express\lib\application.js:210
    throw new TypeError('app.use() requires a middleware function')
    ^

TypeError: app.use() requires a middleware function
    at Function.use (C:\Users\Maximus\WebstormProjects\untitled4\nodejs-blog-tutorial\node_modules\express\lib\application.js:210:11)
    at Object.<anonymous> (C:\Users\Maximus\WebstormProjects\untitled4\nodejs-blog-tutorial\index.js:8:5)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47
[nodemon] app crashed - waiting for file changes before starting...

包.json

{
  "name": "nodejs-blog-tutorial",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "keywords": [
    "blog"
  ],
  "description": "",
  "dependencies": {
    "express": "^4.17.1",
    "express-edge": "^2.0.2",
    "nodemon": "^2.0.4",
    "startbootstrap-clean-blog": "^5.0.9"
  }
}

标签: node.js

解决方案


看来您没有使用 express-edge 库中的正确导出。根据文档,它应该是这样的:

const express = require('express');
const expressEdge = require('express-edge');

const app = new express();
app.use(expressEdge.engine);

或者,您可以这样做:

const express = require('express');
const { config, engine } = require('express-edge');

const app = new express();
app.use(engine);

这里的想法是expressEdge导出一个具有两个属性的对象,config并且engine您必须访问这些属性才能正确使用该库。


推荐阅读