获取uncaughtException:错误:无法找到模块'...\. next\server\app\home\lib\worker.js'当尝试在Next.js中使用pino.transport

btxsgosb  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(120)

我使用create-next-app创建了一个带有typescript的Next.js项目。对于这个特定项目的日志记录,我决定使用Pino日志库,因为它是Next.js本身推荐的。
当我使用没有传输功能的Pino时,它运行得非常好。下面是pino的定义代码,它运行得很好:

import pino from 'pino';

const logger = pino({
    level: process.env.NEXT_PUBLIC_LOG_LEVEL,
    formatters: {
        level: (label) => {
            return { level: label.toUpperCase() };
        },
        bindings: (bindings) => {
            return { host: bindings.hostname };
        },
    },
});

export default logger;

但是当我使用Pino传输时,下面提到的代码(我已经安装了pino-pretty作为dev依赖项):

import pino from 'pino';

const logger1 = pino({
    transport: {
        target: 'pino-pretty',
    },
});

logger1.info('hi');
export default logger1;

我得到下面提到的错误

- error uncaughtException: Error: Cannot find module 'C:\starttwo-productionlot-frontend\.next\server\app\home\lib\worker.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:1075:15)
    at Module._load (node:internal/modules/cjs/loader:920:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at MessagePort.<anonymous> (node:internal/main/worker_thread:164:24)
    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:737:20)
    at exports.emitMessage (node:internal/per_context/messageport:23:28) {
  digest: undefined
}
- error node_modules\thread-stream\index.js (195:31) @ Worker.onWorkerExit
- error uncaughtException: Error: the worker thread exited
    at Worker.onWorkerExit (webpack-internal:///(sc_server)/./node_modules/thread-stream/index.js:163:34)
    at Worker.emit (node:events:513:28)
    at [kOnExit] (node:internal/worker:289:10)
    at Worker.<computed>.onexit (node:internal/worker:209:20)
    at Worker.callbackTrampoline (node:internal/async_hooks:130:17) {
  digest: undefined
}

我也得到了同样的错误(这里我有一个问题,我们需要使用npm安装pino/file吗?):-

import pino from 'pino';
const transport = pino.transport({
  target: 'pino/file',
  options: { destination: '/path/to/file' }
})
pino(transport)

我使用的记录器在服务器端,这是唯一的next.js页.tsx文件谁没有“使用客户端”指令可以请我解决这个错误
我试着实现pino官方文档中提供的示例代码,但我得到了同样的上述错误,代码如下:-
在我的-运输。tsx:-

import { createWriteStream } from 'fs'

export default () => {
  return createWriteStream('.../app/app.log)')// /app/app.log -- location of log file 
}

在logger.tsx中:-

const pino = require('pino')
const transport = pino.transport({
  target: '/absolute/path/to/my-transport.mjs'
})
export default pino(transport)

在next.js中使用pino.transport()有什么限制吗?我们可以在客户端和服务器端使用它吗?如何在pino中使用传输功能?

u7up0aaq

u7up0aaq1#

您有.../path/而不是../path/(一个.太多)
但这并不能解决问题。

解决方案

您在Web服务器上。你不能用Next.js导航到比web服务器的根目录更远的地方,除非你配置了一个自定义服务器(这是可能的),更多信息在这里:
Configuring custom server
GitHub discussion: custom root approach mentioned

  • 酒店️

你应该.gitignore.next目录,所以无论你尝试什么,你应该把它放在另一个目录。
如果文件位于webservers根目录中,则:

建议:

/*
 * __dirname     current directory
 * process.cwd() directory where process/server was started
 */
import path from "path";

// concatenation of paths (e.g. to avoid `/` issues
path.join(__dirname, "where/you/want/to/go");

// or to get the absolute path
path.resolve(__dirname, "where/you/want/to/go");

相关问题