NodeJS/Express中app.use('/parse')报错:需中间件函数却获对象
问题描述
我正在遵循parse-server安装指南,尝试用Node.js和Express部署parse-server,按指南写的服务器配置代码如下:
var express = require('express'); var ParseServer = require('parse-server').ParseServer; var app = express(); var api = new ParseServer({ databaseURI: 'postgres://postgres:myStrongPassword@localhost:5432/postgres', appId: 'app', masterKey: 'master', serverURL: 'http://www.example.com:1337/parse' }); app.use('/parse', api); var httpServer = require('http').createServer(app); httpServer.listen(1337, function() { console.log('parse-server running on http://www.example.com:1337/parse'); });
执行node index.js启动服务器时,抛出错误:
/root/node_modules/express/lib/router/index.js:469 throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn)) ^ TypeError: Router.use() requires a middleware function but got a Object at Function.use (/root/node_modules/express/lib/router/index.js:469:13) at Function.<anonymous> (/root/node_modules/express/lib/application.js:227:21) at Array.forEach (<anonymous>) at Function.use (/root/node_modules/express/lib/application.js:224:7) at Object.<anonymous> (/root/parse-test/index.js:12:5) at Module._compile (node:internal/modules/cjs/loader:1254:14) at Module._extensions..js (node:internal/modules/cjs/loader:1308:10) at Module.load (node:internal/modules/cjs/loader:1117:32) at Module._load (node:internal/modules/cjs/loader:958:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) Node.js v18.14.2
解决方案
这个错误的核心原因是:新版本的parse-server中,ParseServer实例不能直接作为Express中间件传入app.use(),需要调用实例的app属性来获取合法的Express中间件对象。
修改代码中的中间件挂载部分即可解决:
// 原代码 // app.use('/parse', api); // 修改为 app.use('/parse', api.app);
完整修改后的代码:
var express = require('express'); var ParseServer = require('parse-server').ParseServer; var app = express(); var api = new ParseServer({ databaseURI: 'postgres://postgres:myStrongPassword@localhost:5432/postgres', appId: 'app', masterKey: 'master', serverURL: 'http://www.example.com:1337/parse' }); // 关键修改:使用api.app作为中间件 app.use('/parse', api.app); var httpServer = require('http').createServer(app); httpServer.listen(1337, function() { console.log('parse-server running on http://www.example.com:1337/parse'); });
额外注意事项:
- parse-server 5.x及以上版本强制要求使用
api.app挂载中间件,旧版本允许直接传入实例,这是版本差异导致的问题 - 如果修改后仍有异常,先确认依赖安装完整:
npm install express parse-server pg
内容的提问来源于stack exchange,提问作者Another Dude
相关产品推荐
相关产品推荐

