繁体   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