簡體   English   中英

錯誤:node_modules/bcrypto/build/Release/bcrypto.node:npm 在 debian 服務器上啟動的 ELF 無效

[英]error: node_modules/bcrypto/build/Release/bcrypto.node: invalid ELF by npm start on debian server

你好,如果我嘗試npm start ,我會收到此錯誤:

error: /home/kyrill/msh/backend/node_modules/bcrypto/build/Release/bcrypto.node: invalid ELF header /home/kyrill/msh/backend/node_modules/bcrypto/build/Release/bcrypto.node: invalid ELF header {"code":"ERR_DLOPEN_FAILED","stack":"Error: /home/kyrill/msh/backend/node_modules/bcrypto/build/Release/bcrypto.node: invalid ELF header\n    at load (/home/kyrill/msh/backend/node_modules/loady/lib/loady.js:109:11)\n    at Object.<anonymous> (/home/kyrill/msh/backend/node_modules/bcrypto/lib/native/binding.js:11:33)\n    at Module._compile (node:internal/modules/cjs/loader:1092:14)\n    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1121:10)\n    at Module.load (node:internal/modules/cjs/loader:972:32)\n    at Function.Module._load (node:internal/modules/cjs/loader:813:14)\n    at Module.require (node:internal/modules/cjs/loader:996:19)\n    at require (node:internal/modules/cjs/helpers:92:18)\n    at Object.<anonymous> (/home/kyrill/msh/backend/node_modules/bcrypto/lib/native/hkdf.js:10:17)\n    at Module._compile (node:internal/modules/cjs/loader:1092:14)"}
error: /home/kyrill/msh/backend/node_modules/bcrypto/build/Release/bcrypto.node: invalid ELF header Error: /home/kyrill/msh/backend/node_modules/bcrypto/build/Release/bcrypto.node: invalid ELF header

我不知道如何解決它...

api.js

const express = require('express');
const cors = require('cors');
const upload = require('express-fileupload');
const dotenv = require('dotenv').config();
const winston = require('winston');

const authRoute = require('./routes/auth');
const uploadRoute = require('./routes/upload');
const gutachtenRoute = require('./routes/gutachten');
const userRoute = require('./routes/user');

const db = require('./lib/db');
const auth = require('./middleware/auth');
const role = require('./middleware/role');
const app = express();

require('./lib/logging')();

db.init().then(() => winston.info("Orbit DB connected"));

app.use(cors());
app.use(express.json());
app.use(upload());

app.use('/api/auth', authRoute);
app.use('/api/upload', auth, uploadRoute);
app.use('/api/gutachten', auth, gutachtenRoute);
app.use('/api/user', [auth, role], userRoute);


app.listen(process.env.API_PORT, () => winston.info('API Start: http://127.0.0.1:' + process.env.API_PORT));

使用 bcrypt 的地方:

user.js 是 model

const router = require('express').Router();
const User = require('../models/user');
const bcrypt = require('bcryptjs');

router.get('/getall', async (req, res) => {
    res.send(User.getAll());
})

router.post('/add', async (req, res) => {
    const { error } = User.validateRegister(req.body);
    if(error) return res.status(422).send(error.details[0].message);

    const user = await User.findOne(req.body.email);
    if(user) return res.status(400).send('User with this email already exist');

    const salt = await bcrypt.genSalt(10);
    req.body.password = await bcrypt.hash(req.body.password, salt);

    res.send(User.create(req.body));
});

router.post('/update', async (req, res) => {
    const { error } = User.validateUpdate(req.body);
    if(error) return res.status(422).send(error.details[0].message);

    const user = await User.findOne(req.body.email);
    if(!user) return res.status(400).send('User with this email not exist');

    if(req.body.password) {
        const salt = await bcrypt.genSalt(10);
        req.body.password = await bcrypt.hash(req.body.password, salt);
    } else {
        req.body.password = user.password;
    }

    await User.update(req.body);
    res.send(User.getAll());
})

router.post('/del', async (req, res) => {
    // const { error } = User.validateDelete(req.body);
    // if(error) return res.status(422).send(error.details[0].message);

    const user = await User.findOne(req.body.email);
    if(!user) return res.status(400).send('User with this email not exist');

    await User.delete(req.body);
    res.send(User.getAll());
})

module.exports = router;

auth.js 是路線:

const router = require('express').Router();
const bcrypt = require('bcryptjs');
const User = require('../models/user');

router.post('/login', async (req, res) => {
    const { error } = User.validateLogin(req.body);
    if(error) return res.status(422).send(error.details[0].message);

    const user = await User.findOne(req.body.email);
    if(!user) res.status(404).send('Invalid email or password');

    const validPassword = await bcrypt.compare(req.body.password, user.password);
    if(!validPassword) res.status(404).send('Invalid email or password');

    const token = User.generateAuthToken(req.body)
    res.json(token);
})

module.exports = router;

在我的macOS上本地它可以正常工作

我也嘗試使用 --force 對 npm 審計修復,但我收到此錯誤:

npm ERR! command git --no-replace-objects ls-remote ssh://git@github.com/haadcode/ipfs-pubsub-room.git
npm ERR! git@github.com: Permission denied (publickey).
npm ERR! fatal: Could not read from remote repository.

另外,我嘗試使用npm i bcryptjs安裝它

我認為您正在 MAC-OS 上創建構建並在 debian 操作系統上運行它。 當您在一個架構上構建然后嘗試在不同的架構(或某些情況下的平台)上使用相同的構建插件時,會發生這種情況(無效的 ELF 標頭)。

您可以在 debian 服務器上執行哪些操作,刪除node modules並重新生成它們可以解決問題:

刪除節點模塊:

rm -rf node_modules/

然后使用以下命令為 linux 生成相同的模塊:

npm update

看起來您已經安裝了使用本機插件的bcrypto package,由於某種原因無法在您使用的機器上安裝。 npm uninstall bcrypto ,卸載它就可以了,因為您使用的是不使用本機功能的bcryptjs版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM