适配Parse Server 6:修改Express启动代码解决Router.use运行报错
Parse Server 5升级到6后启动代码修改方案
问题背景
此前使用Parse Server 5的启动代码可正常运行,更换服务器硬件后安装最新版Parse Server 6,原代码无法启动,出现如下报错:
原启动代码
var express = require('express'); var ParseServer = require('parse-server').ParseServer; var app = express(); var mountPath = '/...'; var api = new ParseServer({ databaseURI: 'mongodb://...', appId : '...', masterKey : '...', serverURL : 'http://127.0.0.1:...', publicServerURL: '...', cloud: '...', allowClientClassCreation: false }); app.use(mountPath, api); var port = ...; var httpServer = require('http').createServer(app); httpServer.listen(port, function() { console.log('parse-server running on port ' + port + '.'); });
报错信息
TypeError: Router.use() requires a middleware function but got a Object at Function.use (/home/ubuntu/parse/node_modules/express/lib/router/index.js:469:13) at Function.<anonymous> (/home/ubuntu/parse/node_modules/express/lib/application.js:227:21) at Array.forEach (<anonymous>) at Function.use (/home/ubuntu/parse/node_modules/express/lib/application.js:224:7) at Object.<anonymous> (/home/ubuntu/parse/armenianChurches.js:20:5) at Module._compile (node:internal/modules/cjs/loader:1256:14) at Module._extensions..js (node:internal/modules/cjs/loader:1310:10) at Module.load (node:internal/modules/cjs/loader:1119:32) at Module._load (node:internal/modules/cjs/loader:960:12) at Object.<anonymous> (/home/ubuntu/parse/node_modules/pm2/lib/ProcessContainerFork.js:33:23)
修改方案
Parse Server 6重构了核心API,new ParseServer()生成的实例不再直接作为Express中间件使用,需要调用实例的.app属性获取合法的中间件对象,具体修改点如下:
- 将
app.use(mountPath, api);修改为app.use(mountPath, api.app); - 确保Node.js版本满足Parse Server 6要求:最低v16.x,推荐v18.x及以上
- 同步更新
express依赖到最新稳定版,避免版本兼容问题
修改后的完整代码
var express = require('express'); var ParseServer = require('parse-server').ParseServer; var app = express(); var mountPath = '/...'; var api = new ParseServer({ databaseURI: 'mongodb://...', appId : '...', masterKey : '...', serverURL : 'http://127.0.0.1:...', publicServerURL: '...', cloud: '...', allowClientClassCreation: false }); // 关键修改:使用api.app作为Express中间件 app.use(mountPath, api.app); var port = ...; var httpServer = require('http').createServer(app); httpServer.listen(port, function() { console.log('parse-server running on port ' + port + '.'); });
内容的提问来源于stack exchange,提问作者coolman
相关产品推荐
相关产品推荐

