Nodemon 崩溃

Nodemon crashes

我尝试部署 js 应用程序但由于某种原因无法启动 nodemon:

 nodemon
[nodemon] 2.0.12
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node user.server.js`
file:///var/www/html/socioboard/socioboard-api/User/middleware/recent- 
visited.middleware.js:73
    const category = request?.baseUrl?.replace('/v1/', '') || ' ';
                             ^

SyntaxError: Unexpected token '.'
at Loader.moduleStrategy (internal/modules/esm/translators.js:140:18)
[nodemon] app crashed - waiting for file changes before starting...

这是它指向的文件:

import moment from 'moment';
import RecentVisitedModel from '../../Common/Mongoose/models/recent-visited.js';
import { phproutes } from '../../Common/Shared/recent.visited.shared.js';

const recentVisitedModel = new RecentVisitedModel();

export default (request, response, next) => {
 /* #swagger.ignore = true */
const requestStart = Date.now();
const oldWrite = response.write;
const oldEnd = response.end;
const chunks = [];
let body;

response.write = function (chunk) {
chunks.push(chunk);

return oldWrite.apply(response, arguments);
};
response.end = function (chunk) {
if (chunk) chunks.push(chunk);
if (Buffer.isBuffer(chunks))
  body = Buffer.concat(chunks).toString('utf8');
oldEnd.apply(response, arguments);
};
let requestErrorMessage = null;
const getError = (error) => {
requestErrorMessage = error.message;
};

request.on('error', getError);
const logClose = () => {
removeHandlers();
log(request, response, 'Client aborted.');
};
const logError = (error) => {
removeHandlers();
log(request, response, error.message);
};
const logFinish = () => {
removeHandlers();
log(request, response, requestErrorMessage);
};

response.on('close', logClose);
response.on('error', logError);
response.on('finish', logFinish);
const removeHandlers = () => {
//  request.off("data", getChunk);
// request.off("end", assembleBody);
request.off('error', getError);
response.off('close', logClose);
response.off('error', logError);
response.off('finish', logFinish);
};
const log = (request, response, errorMessage) => {
try {
  const {
    rawHeaders, httpVersion, method, socket, url,
  } = request;
  const { remoteAddress, remoteFamily } = socket;
  const { statusCode, statusMessage } = response;
  const headers = response.getHeaders();
  const userId = request.body.userScopeId;

  if (body) {
    body = JSON.parse(body);
  }
  let post;
  const posts = [];

  if (userId) {
    const category = request?.baseUrl?.replace('/v1/', '') || ' ';
    let nodeUrl = url.split('/');

    nodeUrl = nodeUrl[1].split('?');
    const subcategory = phproutes[category]?.find((x) => x.nodeapi === 
  nodeUrl[0]).subcategory || '';
    const phproute = phproutes[category]?.find((x) => x.nodeapi === 
  nodeUrl[0]).phproutes || '';

    if (subcategory !== '') {
      if (nodeUrl[0] !== 'get-team-invitations') {
        const {
          requestParams,
          requestQuery,
          requestBody,
        } = requestParameters(request.params, request.query, request.body);
        // if (response.statusCode == !304) //no changes in response

        post = {
          createdTime: moment.now(),
          processingTime: Date.now() - requestStart,
          action: url || '',
          subcategory,
          phproute,
          category,
          userId,
          code: body.code || 200,
          requestParams,
          requestQuery,
          requestBody,
          message: body.message || 'Success',
          error: body.error || '',
          method,
        };
        posts.push(post);
        recentVisitedModel.insertManyPosts(posts);
      }
    }
  }
 } catch (error) {
  // console.log(error)
 }
};

const requestParameters = (requestParams, requestQuery, requestBody) => {
delete requestQuery.userScopeName;
delete requestBody.userScopeId;
delete requestBody.userScopeEmail;
delete requestBody.userScopeName;
delete requestBody.userScopeMaxAccountCount;
delete requestBody.userScopeMaxMemberCount;
delete requestBody.userScopeAvailableNetworks;
delete requestBody.userScopeMaxScheduleCount;
delete requestBody.userScopeIsAdmin;

return { requestParams, requestQuery, requestBody };
};

 next();
};

我是新手,看不出这里出现此错误的原因?好像没有'.'点在代码中。

如果这个跟版本有关,那么我的节点版本是v12.22.6 Npm 是 6.14.15

感谢您的任何建议

您尝试使用的语法 (request?.baseUrl?.replace) 称为 Optional Chaining,它在旧版本的 Node 中不受支持。您需要将您的 Node 版本升级到至少 v14.

您可以找到支持的平台列表及其版本 here